【问题标题】:64-bit Windows API: what is the size of a C/C++ "DWORD"?64 位 Windows API:C/C++“DWORD”的大小是多少?
【发布时间】:2011-06-26 18:30:41
【问题描述】:

我只安装了 32 位 Windows,所以我无法自己验证。

如果我理解正确的话,微软API中各个地方使用的DWORD是指原始的16位字,与当前的硬件架构无​​关?

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

【问题讨论】:

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


    【解决方案1】:

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

    有些东西不是立即明显的指针,例如手柄,LPARAM,WPARAM。但是这三个在实际持有指针时会改变宽度。

    【讨论】:

      【解决方案2】:

      DWORD 始终为 32 位(无符号)。 QWORD 始终为 64 位(无符号)。 然后是 32 位和 64 位的 DWORD32 和 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】:

        天哪,又来了一个合理的问题... :)

        它总是 32 位,因为在 x86 中“字”被认为是 16 位。如果大小改变,程序就会中断。

        如果您需要原生大小的DWORD,请尝试DWORD_PTR

        Don't askDWORD_PTRULONG_PTRUINT_PTRsize_t 之间的区别是什么;I have no idea 微软在发明前三个时的想法......)

        【讨论】:

          【解决方案4】:

          在 x86 处理器上,DWORD 是 32 位,即使在 64 位 Windows 上也是如此。看到这个Wikipedia article

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • 在 x86 出现之前很久,大型机上的一个字是 32 位的。
            • 一个 byte 是最小的可直接寻址的内存单元。在所有现代通用处理器中,字节都有 8 位。历史上存在字节大小为 6、8 或 9 位的重要架构,这就是为什么一些标准使用 octetword 是处理器的“自然单位”,通常是通用寄存器的大小,几乎可以肯定也是地址的大小。在现代处理器中,字长通常为 8、16、32 或 64 位,但也有 36 位机器。英特尔在推出 32 位处理器时选择将 WORD 固定在 16 位。
            猜你喜欢
            • 2010-09-27
            • 1970-01-01
            • 1970-01-01
            • 2010-09-07
            • 2012-08-08
            • 2019-08-21
            相关资源
            最近更新 更多