为什么“long int”与“int”具有相同的大小? 这个修饰符是否有效?

嗯..我很喜欢这样的修饰符,如 / 扩展/减少创建变量时分配的内存量,但是……

#include  #define test_int int #define long_int long int #define long_long_int long long int void main() { printf("%i\n", sizeof (test_int)); //output 4 printf("%i\n", sizeof (long_int)); //output 4. Why? wasn't I modified it's size? printf("%i\n", sizeof (long_long_int)); //output 8 } 

由于未知原因,它将intlong int的大小打印为相同。 我使用的是vc ++ 2010 express版。 对不起,很难在谷歌找到答案,它总是显示int作为单独的类型。

即使在64位系统上,MS选择long 32位的原因在于,由于历史原因,现有的Windows API使用intlong的混合类似的东西,并且期望这是32位值(其中一些可以追溯到Windows是16位系统的时候)。 因此,为了将旧代码转换为新的64位体系结构,他们选择long保持32位,以便在各个位置混合intlong应用程序仍然可以编译。

C ++标准中没有任何内容规定long应该大于int (当然不是大多数32位系统)。 所有标准都说short的大小<= int <= long – 而且这个short至少是16位,如果内存服务[不一定表示为“应该至少16位”,我认为它提到的范围值。

标准要求的是:

 sizeof(char) == 1 

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

(并且相应的无符号类型与签名类型具有相同的大小)。

此外,每种类型都有最小大小,由INT_MAX等的值限制间接指定: char必须至少为8位, shortint 16, long 32和long long 64。

在16位平台上, shortint通常都是16位; 在32位平台(以及仍然存在的36位和48位平台)上, intlong几乎总是相同的大小。 在现代64位平台(带字节寻址)上,合理的解决方案是使所有四种类型具有不同的大小(尽管可以说根据标准, int应该是64位,这意味着intlonglong long都有相同的大小)。

C和C ++实现,long大于或等于int。 今天最流行的桌面平台,如Windows和Linux,主要运行在32位处理器上,大多数这些平台的编译器使用32位int,它具有相同的大小和表示forms。

在64位编译器中,int和log int都是4个字节。

如果你在Windows中,请通过以下链接: http : //msdn.microsoft.com/en-us/library/s3f49ktz%28v=vs.90%29.aspx

您可以在另一个讨论中找到一些信息: 64位Windows上的长位是多少?

这是订购

 char short (int) int long (int) long long (int) 

该标准要求sizeof(char) == 1为真。 该标准还要求: int至少为16位。 long int至少为32位, long long int至少为64位。

由于32位处理器是maintstream,编译器通常将int设置为4个字节。 为了兼容性,在64位系统(无论如何为MSVC)上没有再次发生扩展。

关键是你误解了int和long的含义(这不是形容词)。

标准定义的是每种类型的比特数要求这种关系保持不变:

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

int ,就其自身而言,可以长达一段long取决于实现的构思方式。

编译器设计者倾向于最大化int算法的性能,使其成为底层处理器或OS的自然大小,并相应地设置其他类型。

但是使用long int ,因为int可以省略,它只是定义为long