【问题标题】:How large is a DWORD with 32- and 64-bit code?32 位和 64 位代码的 DWORD 有多大?
【发布时间】:2010-09-07 13:17:25
【问题描述】:

在 Visual C++ 中,DWORD 只是一个无符号长整数,它依赖于机器、平台和 SDK。但是,由于 DWORD 是双字(即 2 * 16),那么在 64 位架构上,DWORD 仍然是 32 位吗?

【问题讨论】:

  • DWORD 不依赖于机器、平台或 SDK。
  • 这是一个挑剔的问题,但从技术上讲,这个问题适用于 C 或 C++,最好删除 C++ 标签或添加 C 标签,但我不确定哪个更好。

标签: c++ winapi 64-bit dword


【解决方案1】:

不...在所有 Windows 平台上 DWORD 都是 32 位。 LONGLONG 或 LONG64 用于 64 位类型。

【讨论】:

  • 跟windows没关系,是Intel用语
  • @Abyx: typedef DWORD 非常Windows。
  • @rubenvb,哦,为什么叫DWORD 而不是QBYTEDUBWD
【解决方案2】:

定义为:

typedef unsigned long       DWORD;

但是,根据 MSDN:

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

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

typdef unsigned _int64 DWORD64;

希望对您有所帮助。

【讨论】:

    【解决方案3】:

    实际上,在 32 位计算机上,一个字是 32 位的,但 DWORD 类型是过去 16 位的遗留物。

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

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

    随着从 32 位转换到 64 位而发生变化的所有平台相关类型都以 _PTR 结尾(DWORD_PTR 在 32 位 Windows 上为 32 位,在 64 位 Windows 上为 64 位)。

    【讨论】:

    • 列出了实际范围here
    • @LaurieSearn 我认为这篇文章是关于微软编译器内部使用的数据类型,而不是像DWORD 这样的winapi数据类型。
    • 是的,答案链接official list 中的文章现在具有范围: 引用:DWORD:32 位无符号整数。范围是 0 到 4294967295(十进制)。
    • DWORD 在 Windows 库中等于“无符号长”
    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 2014-07-31
    • 2021-02-08
    • 2012-02-27
    • 2010-12-18
    • 2017-02-18
    • 2012-04-23
    • 2011-06-26
    相关资源
    最近更新 更多