【问题标题】:Difference between FAR and FAR * used in winsockwinsock中使用的FAR和FAR *的区别
【发布时间】:2012-09-12 06:17:52
【问题描述】:

我想知道FARFAR *之间的区别 这个函数来自 WinSock

int PASCAL FAR connect (SOCKET s, const struct sockaddr FAR * name, int len);

【问题讨论】:

  • 远函数是当前代码段之外的函数。
  • 星号并不真正属于FAR,而是属于类型。所以name 是一个指向struct sockaddr 的指针。在旧的 16 位系统上,FAR 将使其成为指向 struct sockaddr 的 32 位指针。

标签: c++ c winapi winsock


【解决方案1】:

您可以放心地忽略 FAR 关键字,因为它们不再使用。

很久以前,在 Win16 时代,有 16 位指针(NEAR)和 32 位指针(FAR)。他们的处理方式不同,在某些情况下并不简单。自从Win32开始以来,这种差异已经消失了。 Win64 也没有使用分段内存模型。

同时在硬件层面,这些细分市场仍然存在于英特尔架构中。但是 Windows 对用户模式程序员(以及内核模式驱动程序编写者)完全隐藏了这些细节。

您仍然可以在头文件中找到这些关键字,因为它们不会伤害任何人。

【讨论】:

    【解决方案2】:

    在这两种情况下,当这段代码用于分段内存模型时,它们都会修改指针的大小。 const struct sockaddr FAR * name 表示名称将是一个 32 位指针。 int PASCAL FAR connect 表示任何指向连接函数的指针都是 32 位指针。替代方案是 NEAR,这意味着指针是 16 位的。

    但自 Windows 3.1 以来没有人使用分段内存模型。它们太老了,我什至不确定我使用的术语是否正确。它们太老了,我敢打赌这里一半以上的常客永远不会听说过它们。所以我想我可以自信地说你可以忽略 FAR 的任何使用,只是假装它不存在。

    你在哪里看到的?

    【讨论】:

    猜你喜欢
    • 2018-11-10
    • 2019-01-20
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多