64位Windows API:C / C ++“DWORD”的大小是多少?

时间:2011-02-14 07:58:08

标签: windows winapi visual-c++ 32bit-64bit win64

我只安装了32位Windows,因此我无法自行验证。

如果我理解正确,在Microsoft API中的各个地方使用的DWORD是参考原始的16位字,并且与当前的硬件架构无​​关?

所以看起来是32位的DWORD,即使我最终编译并链接我的应用程序以在64位Windows中运行,仍将保持32位?或者DWORD会变成128位宽吗?

5 个答案:

答案 0 :(得分:20)

唯一改变32到64之间大小的是指针。所以DWORD保持32位宽。

有些事情并不是很明显的指针,例如: HANDLE,LPARAM,WPARAM。但这三个改变了宽度,因为它们实际上有指针。

答案 1 :(得分:3)

天哪,这是另一个合理的问题...... :)

它总是32位,因为在x86中“字”被认为是16位。如果尺寸发生变化,程序将会中断。

如果您需要原始尺寸DWORD,请尝试DWORD_PTR

Don't ask DWORD_PTRULONG_PTRUINT_PTRsize_t之间的差异是什么; I have no idea微软在想什么发明了前三个......)

答案 2 :(得分:3)

DWORD始终为32位(无符号)。 QWORD始终为64位(无符号)。 然后是DWORD32和一个32位和64位的DWORD64。不要问我他们为什么在那里: - )

http://msdn.microsoft.com/en-us/library/cc230318(v=PROT.10).aspx

http://msdn.microsoft.com/en-us/library/cc230362(v=PROT.10).aspx

一般

http://msdn.microsoft.com/en-us/library/cc230309(v=PROT.10).aspx

答案 3 :(得分:0)

在x86处理器上,即使在64位Windows上,DWORD也是32位。请参阅此Wikipedia article

答案 4 :(得分:0)

我甚至会比x86拱更进一步。并且一般说来,WORD可以被认为是16位。传统上,层次结构是BYTE(8位),WORD(16位),因此DWORD(如果D被认为是双宽WORD)将是32位。这并不一定与特定平台或语言有任何关系,BYTE已经是8位,而WORD已经是16位回到旧的8位计算机时代,甚至在x86拱门之前。存在