在winsock中使用的FAR和FAR *之间的差异

时间:2012-09-12 06:17:52

标签: c++ c winapi winsock

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

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

2 个答案:

答案 0 :(得分:4)

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

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

同时,在硬件级别,这些网段仍然存在于英特尔架构中。但是这些细节完全被Windows用户模式程序员(以及内核模式驱动程序编写者)隐藏。

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

答案 1 :(得分:3)

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

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

你在哪里看到这个?