2013-05-31 55 views
15

在通過一些源代碼時,我發現了一個C程序中的方法,它接受了WORD,DWORD和PWORD類型的參數。我知道他們翻譯成無符號數字,但他們爲什麼叫WORD?在Windows API中,C中的WORD類型是什麼?

+1

我只想補充一點,當爲Windows開發時,你可以找到類型的定義[在這個MSDN文檔](http://msdn.microsoft.com/en-us/library/windows/desktop /aa383751(v=vs.85).aspx)。請注意,'WORD'不再是最近CPU的機器字的實際大小,而是爲了兼容性而保持在16位。 – Dirk

+0

@Dirk我發佈這個問題後不久在源代碼中發現了這個。它位於名爲WinDef.h的頭文件中。包含這些類型的所有類型定義。謝謝。 – Nealon

回答

19

字大小和數據類型

字是數據的一臺機器可以同時處理的量。這適合包含字符(通常爲8位)和頁面(多個字,通常爲4或8KB的值)作爲其他數據測量的文檔類比。一個字是整數個字節,例如一個,兩個,四個或八個字節。當有人談論機器的「n位」時,他們通常會談論機器的字大小。例如,當人們說Pentium是32位芯片時,他們指的是其字長,即32位或4個字節。

處理器的通用寄存器(GPR)的大小等於其字大小。例如,給定體系結構中的組件寬度,內存總線通常至少與字大小一樣寬。通常,至少在Linux支持的體系結構中,內存地址空間等於字大小[2]。因此,指針的大小等於字大小。此外,C型long的大小等於字大小,而int型的大小有時小於字大小。例如,Alpha有64位字長。因此,寄存器,指針和長類型的長度都是64位。然而,int類型的長度是32位。 Alpha可以訪問和操作64位,一次一個字。

進一步讀:http://www.makelinux.com/books/lkd2/ch19lev1sec2

+1

看起來在彙編中,「字」通常是2個字節。在我看來,另一個可操作的東西是,在GDB中,命令爲'x','w'表示4個字節,'h'表示2個字節。它似乎不統一。 –

2

WORD表示2個字節。

它最初用於指代指針大小(如在字長爲16位的CPU中)。
在Windows 3.1(僅支持16位機器)中(以及之前),Windows API在typedefs中使用它,所以含義不能再改變。

+0

就像long float是C++中double的舊術語一樣? – Nealon

+0

@Nurgle在C++中,要打印出來或掃描一個double,可以使用「%lf」代表長浮點數。爲什麼是這種情況,如果他們不相關? – Nealon

+1

我認爲你的第一句話有點誤導。 A **字**不定義爲2字節,而是定義爲總線/寄存器的寬度。 Windows上的WORD類型是16位,因爲它最初是爲16位機器開發的。 – Dirk

2

WORD是probalby從一些舊的代碼和通常意味着16位,而DWORD通常意味着32位。如果你不確定你應該檢查你的代碼,因爲它們必須在某個地方定義。

WORD源於機器字,其大小取決於硬件。