2012-01-12 28 views
2

我想明白为什么FAR用于下面的typedef语法?使用typedef的语法解释

#define FAR 
//some other instructions 
//..... 
//..... 

typedef struct tagDEVICE_BUFFER_W 
{ 
.... 
.... 
}DEVICE_BUFFER_W; 

typedef DEVICE_BUFFER_W FAR * LPDEVICE_BUFFER_W; //Why FAR is used here? 

如果我不使用FAR如下所述?它会有所作为吗?

typedef DEVICE_BUFFER_W * LPDEVICE_BUFFER_W; 

回答

5

这是从古代遗留下来的。 16位Windows代码有远近指针。我认为它是区分段间和段内寻址,但是记忆已经消失(很多)。

+0

回到过去做了DOS与用Borland C游戏++记得近,远,我觉得这没有某种形式的EMM/EMS魔力巨大的指针。当然,一旦我们切换到Watcom的平坦记忆模型,所有这些都消失了。 – 2012-01-12 07:44:55

3

我实际上并不知道什么是远的指针,所以我只是指着你去维基百科。正如马塞洛所说,它似乎已经过时并且是一项传统的技术/技术。

请参阅here维基百科的文章。

而且,从programming forum采取(此链接到一个daniweb线程):

在80286的过去,有近(16位)和远(16:16 = 20/24位)指针。由于x86的16位特性,内存被划分为64k字节(16位)的段。地址总线支持20到24位(1-16MB),所以为了处理更大的区域,段寄存器与16位指针组合在一起形成完整的地址。这种体系结构在今天的奔腾中仍然存在,但它已经成为一个非问题。 Windows使用“平坦”内存模型,其中所有段指向相同的位置,而不是16位偏移量,有32位偏移量。在现代x86软件中,FAR关键字已经不再需要了。

1

对于这个特定的实现,它可能没有区别,但是在不同的操作系统或体系结构上,它们可以使用它来定义额外的信息。在这种情况下,它可能用于far pointers

#define FAR far