为什么我在Microsoft Visual Studio 2010中编译为x64 sizeof(unsigned int) == 4
? 不是必须不应该是8 == sizeof(int)
吗?我在配置管理器中更改平台,在command_line_compiler中,所有设置都是x64,但大小为unsigned int = 4
。
我做错了什么?
答案 0 :(得分:4)
因为Windows x64使用LLP64编程模型,其中int
和long
保持32位,但long long
和指针是64位。
答案 1 :(得分:1)
不是必须= 8 = sizeof(int)
不,不必如此。各种整数类型的大小取决于实现,标准仅规定了(在第5.2.4.2节中)一些最小范围。
例如,char
必须至少有8位,short int
和int
(也是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 int
或long
(及其未签名的对应方)长度为8个字节。
答案 3 :(得分:0)
语言标准没有说明sizeof(int)
或任何数据类型。它的实现已定义。
但它应该遵循这条规则:
1<=sizeof(char) < sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)