2012-01-12 40 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