microsoft x64-compiler中的sizeof unsigned int

时间:2012-11-11 21:22:47

标签: c 64-bit int

  

可能重复:
  What is the bit size of long on 64-bit Windows?

为什么我在Microsoft Visual Studio 2010中编译为x64 sizeof(unsigned int) == 4不是必须不应该是8 == sizeof(int)吗?我在配置管理器中更改平台,在command_line_compiler中,所有设置都是x64,但大小为unsigned int = 4

我做错了什么?

4 个答案:

答案 0 :(得分:4)

因为Windows x64使用LLP64编程模型,其中intlong保持32位,但long long和指针是64位。

答案 1 :(得分:1)

  

不是必须= 8 = sizeof(int)

不,不必如此。各种整数类型的大小取决于实现,标准仅规定了(在第5.2.4.2节中)一些最小范围。

例如,char必须至少有8位,short intint(也是unsigned版本,其大小必须相同,对齐要求作为相应的签名类型)必须至少有16位,long必须至少有32位,long long至少为64位。

即使在64位系统上,int(和unsigned int)通常也是32位类型。

long是32位还是64位依赖,大多数(如果不是全部)64位Linux系统是64位,Windows 64位是32位。

答案 2 :(得分:0)

  

是不是必须= 8 = sizeof(int)?

如果是这样,用正确的英语,应该表示“它的大小是否与int的大小相同”?然后答案是:是的,标准要求无符号整数类型及其对应的有符号类型具有相同的大小。如果不是这样,则Visual Studio的编译器不符合(惊讶,惊讶) ...)。

然而, {/ 1>}和int的长度可能都是4字节长 - 即使在64位实现上也没有什么特别奇怪的。可能unsigned intlong(及其未签名的对应方)长度为8个字节。

答案 3 :(得分:0)

语言标准没有说明sizeof(int)或任何数据类型。它的实现已定义。

但它应该遵循这条规则:

1<=sizeof(char) < sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)