32位和64位代码中的DWORD大小是多少?

58
在Visual C++中,DWORD只是与机器、平台和SDK有关的无符号长整型。但是,由于DWORD是双字(即2 * 16位),在64位架构上,DWORD仍然是32位吗?

7
一个DWORD不依赖于机器、平台或SDK。 - Mooing Duck
这只是一个小问题,但从技术上讲,这个问题适用于C或C++,最好删除C++标签或添加C标签,但我不确定哪个更好。 - jrh
4个回答

70

实际上,在32位计算机上,一个字是32位,但DWORD类型是16位时代的剩余物。

为了更容易地将程序移植到新系统,Microsoft决定所有旧类型的大小都不会改变。

您可以在此处找到官方列表: http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx

所有与从32位到64位过渡有关的平台相关类型都以_PTR结尾(例如,DWORD_PTR在32位Windows上为32位,在64位Windows上为64位)。


实际范围在此处列出(https://msdn.microsoft.com/zh-cn/library/s3f49ktz.aspx)。 - Laurie Stearn
@LaurieStearn 我认为这篇文章讲的是Microsoft编译器内部使用的数据类型,而不是winapi中的数据类型,比如DWORD - jrh
2
是的,答案中链接的官方列表现在已经有了范围:引用:“DWORD: 32位无符号整数。范围为0到4294967295十进制。” - Laurie Stearn
DWORD在Windows库中等同于“unsigned long”。 - jaques-sam

18

它的定义为:

typedef unsigned long       DWORD;

然而根据MSDN:

在32位平台上,long与int是同义词。

因此,在32位操作系统上,DWORD是32位的。对于64位DWORD,有一个单独的定义:

typdef unsigned _int64 DWORD64;

希望这可以帮到你。


12

没有统一的位数描述符。在所有 Windows 平台上,DWORD 都是 32 位。LONGLONG 或 LONG64 用于 64 位类型。

注:该段内容涉及 IT 技术领域。


它与Windows无关,这是英特尔的术语。 - Abyx
7
@Abyx: DWORD 这个类型定义非常与 Windows 相关。 - rubenvb
2
@rubenvb,顺便问一下为什么它叫做 DWORD 而不是像 QBYTEDUBWD 这样的其他名称? - Abyx

1

Windows API中定义DWORD的大小如下:

  • x86: sizeof(DWORD) = 4
  • x64: sizeof(DWORD) = 4
(注:x86和x64分别代表32位和64位操作系统)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接