为什么在一些编译器中int的大小有所不同?

这个问题在这里已经有了答案:

  • C ++标准规定int,long类型的大小是什么? 24个答案

  • 虽然“为什么”可以用“因为标准是这样说”来回答的,人们可以说标准可以写成不同的方式来保证特定的尺寸。

    但是,C和C ++的目的是在所有机器上生成非常快速的代码。 如果编译器必须确保int对于该机器来说是一个“不自然的大小”,那就需要额外的指令。 对于几乎所有的情况,这都不是必需的,你所关心的只是它足够“足够我想做”。 所以,为了给编译器一个很好的机会来生成“好代码”,该标准只规定了最小尺寸,避免编译器不得不生成“额外代码”来使int (和其他类型)以非常特定的方式运行。

    C和C ++的许多优点之一就是有编译器可以针对大量机器,从小型8位和16位微控制器到大型64位多核处理器(如PC中的)。 当然,也有一些18,24或36位的机器。 如果您的机器的本地大小为36位,那么如果由于某些标准的说法,您将不会很高兴,由于额外的指令,您会得到整数数学性能的一半,并且不能使用int ...

    具有8位寄存器的小型微处理器通常支持16位加法和减法(也可能是乘法和除法),但是32位数学将涉及这些指令的加倍[以及更多用于乘法和除法]。 所以16位整数(2字节)在这样一个小处理器上会更有意义 - 特别是因为内存可能不是很大,所以为每个整数存储4个字节有点浪费。 在32位或64位机器中,内存范围很可能要大得多,因此整数较大并不是什么缺点,而32位整数操作与较小的整数操作速度相同(并且在某些情况下“更好” - 例如在x86中,16位简单的数学运算(如加法或减法)需要额外的前缀字节来表示“make this 16-bit”,所以16位整数的数学计算会占用更多的代码空间)。


    因为C标准说:

    (C99,6.2.5p5)“一个普通的”int对象具有执行环境的体系结构所建议的自然大小“

    C仅为intINT_MAX )可容纳的最大值定义最小值, int可容纳最小值的最大值( INT_MIN )。

    链接地址: http://www.djcxy.com/p/40401.html

    上一篇: Why does the size of an int vary in some compilers?

    下一篇: What is maximal value of int on 64 bit GCC