ajq*_*q88 0 c c++ architecture int
阅读以下资源,它说int /指针的大小可能因编译器而异:
http://www.c4learn.com/c-programming/c-size-of-pointer-variable/
为什么是这样?
我理解C只定义了一个类型应该保存的最小和最大数量,但为什么一个编译器选择将例如int设置为2个字节而另一个设置为4?一个人比另一个人有什么优势?
虽然"为什么"可以用"因为标准如此说"来回答,但人们可以提出这样的论点,即标准可以用不同的方式书写,以保证特定的大小.
但是,C和C++的目的是在所有机器上生成非常快的代码.如果编译器必须确保int该机器的"非自然大小",则需要额外的指令.对于几乎所有情况,这都不是必需的,你所关心的只是它"足够大,我想做什么".因此,为了给编译器提供生成"良好代码"的良好机会,该标准仅指定最小大小,避免编译器必须生成"额外代码"以使int(和其他类型)以非常特定的方式运行.
C和C++的众多优点之一是有针对各种机器的编译器,从小型8位和16位微控制器到大型64位多核处理器,如PC中的那些.当然,还有一些18,24或36位的机器.如果您的机器具有36位原生大小,那么如果因为某些标准这样说,由于额外的指令,您将获得整数数学性能的一半,并且不能使用前4位int...
具有8位寄存器的小型微处理器通常支持进行16位加法和减法(也许还有乘法和除法),但32位数学将涉及将这些指令加倍[以及更多的乘法和除法工作].所以16位整数(2字节)在这么小的处理器上会更有意义 - 特别是因为内存可能也不是很大,所以为每个整数存储4个字节有点浪费.在32位或64位机器中,存储器范围很可能要大得多,因此具有较大的整数并不是一个缺点,32位整数运算与较小的运算速度相同(在某些情况下) "更好" - 例如在x86中,16位简单的数学运算(如加法或减法)需要额外的前缀字节来表示"使这个16位",因此16位整数的数学会占用更多的代码空间).