【问题标题】:Size of various datatypes on Windows 64 bit platform - specifically sizeof(int) [duplicate]Windows 64 位平台上各种数据类型的大小 - 特别是 sizeof(int) [重复]
【发布时间】:2013-12-24 17:25:09
【问题描述】:

我使用 Microsoft Visual Studio 2012 作为我的 IDE 环境。显然,我的机器运行的是 Windows 7 x64,我正在尝试开发一个 64 位的程序。

但请注意,编译器是 Nvidia 的 nvcc(我已验证我下载的是 64 位版本)。

为详细起见,这是 Visual Studio 打印出来的编译命令:

 D:..."C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\bin\nvcc.exe" -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include"  -G   --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile   -g   -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o x64\Debug\kernel.cu.obj "...kernel.cu" -clean 

它似乎正在编译为 64 位。

如果是这样,这就是我注意到的:

When compiled to run on a Windows platform...

(1) sizeof(int) == 4
(2) sizeof(long) == 4 //Where 1 and 2 are true regardless of platform, x86 or x64
(3) sizeof(long long) == 8

这是准确的吗?如果是,这是否意味着我必须声明一个 long long 才能在 Windows 中使用 8 字节“like”整数? (这意味着我需要避免双打和浮动)。

【问题讨论】:

  • 当编译使用 Visual C++ 在 Windows 中运行时。各种类型的大小更多地取决于编译器而不是操作系统。
  • @cHao 真的吗?向我展示一个与 Windows 兼容的编译器,它没有 16 位 short、32 位 int/long 和 64 位 long long。
  • @JonathanLeffler 是的,我看到了那篇文章。但是,我想验证我的编译器设置是否正确。
  • @Sneftel:没见过……但也没看过,反正也没关系。 Windows API(不管位数)几乎从不直接使用基本类型,正是因为对东西的大小做出假设是一个坏主意——尤其是编译器明确允许定义的东西(在指定的限制内)在标准中)。
  • 从 API 架构的角度来看,抽象当然是有意义的。不过,从编程的角度来看,只要您不进行嵌入式或奇怪的大型机编程,您就可以放心地假设这些类型宽度。

标签: c++ c windows


【解决方案1】:

long long 由标准保证为 64 位或更长,因此您的猜测是正确的。但是,为清楚起见,最好包含<cstdint> 并使用int64_tint_least64_t

【讨论】:

    【解决方案2】:

    是的,MSVC 中的整数是 4 个字节。有关 MSVC 大小的详细信息,请参阅 this article

    对于 8 字节数字,请使用 long longdouble

    【讨论】:

    • 很高兴知道...不确定我是否错过了将编译器模式切换到 64 位的地方。
    • 或使用来自<stdint.h>的类型
    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多