Why does the size of an int vary in some compilers?
读取以下资源时,它表示int/指针的大小可能因编译器而异:
网址:http://www.c4learn.com/c-programming/c-size-of-pointer-variable/
为什么会这样?
我知道C只定义了一个类型应该保存的最小和最大数量,但是为什么一个编译器会选择将例如int设置为2个字节,另一个设置为4个字节?彼此的优势是什么?
虽然"为什么"可以用"因为标准是这样说的"来回答,但人们可以提出这样的论点,即标准可以以不同的方式书写,以保证特定的大小。
然而,C和C++的目的是在所有机器上产生非常快的代码。如果编译器必须确保
C和C++的许多优点之一是,编译器有针对大量的机器,从8位和16位微控制器到大型,64位多核处理器,如PC机中的处理器,当然也有一些18, 24位或36位的机器。如果你的机器有36位本机大小,你不会很高兴,因为有些标准是这样说的,你得到一半的性能在整数数学由于额外的指令,不能使用一个
带8位寄存器的小型微处理器通常支持16位加法和减法(也可能是乘法和除法),但32位数学将涉及到这些指令的加倍[以及乘法和除法的更多工作]。所以16位整数(2字节)在这样一个小的处理器上更有意义——特别是因为内存可能也不太大,所以为每个整数存储4个字节是有点浪费。在32位或64位计算机中,内存范围很可能要大得多,因此拥有更大的整数并不是什么缺点,32位整数操作的速度与较小的整数相同(在某些情况下"更好"),例如在x86中,16位简单的数学操作(如加法或减法)需要额外的前缀字节来表示"make t他的16位",所以16位整数的数学运算将占用更多的代码空间)。
因为C标准规定:
(C99, 6.2.5p5)"A"plain" int object has the natural size suggested by the architecture of the execution environment"
c只为