可能重复:
使用16位整数的重要性
如果今天的处理器执行(在标准条件下)32位操作 - 那么使用"短整数"是否合理?因为为了对该数据执行操作,它会将其转换为32位(从16位)整数,执行操作,然后返回到16位 - 我想.那有什么意义呢?
本质上我的问题如下:
你的第一个问题的答案也应该澄清最后一个问题:如果你需要存储大量的16位int
s,你可以节省32位int
s 所需内存量的一半,无论可能带来什么"附带好处"用它,比如更有效地使用缓存.
如今,大多数CPU都有针对16位和32位操作的单独指令,以及从内存读取和写入16位值的指令.在内部,ALU可能正在执行32位操作,但上半部分的结果不会使其返回寄存器.
处理器不需要“扩展”一个值来使用它。它只是用零填充未使用的空间,并在执行计算时忽略它们。short int
因此,实际上,在 a 上运行比在 a 上运行要快long int
,尽管使用当今快速的 CPU 很难注意到哪怕一点点的差异(双关语)。
机器并没有真正转换。当更改值的大小时,它要么向左侧填充零,要么完全忽略左侧不适合目标内存区域的额外位。
不,这通常是人们将值用于不需要short int
a 范围的目的的原因。long int
每个长度分配的内存都不同int
,就像 ashort int
比 a 占用更少的内存位一样long int
。优化的步骤之一是将long int
值更改为short int
范围不超过 a 的值short int
,这意味着该值永远不会使用 a 分配的额外位long int
。当处理数组中的大量元素或相同struct
或class
.
不同的int
大小在 RAM 和内部处理器缓存中存储不同数量的位数。float
、double
和也是如此long double
,尽管long double
主要针对 64 位系统,并且大多数编译器只是忽略long
在 32 位机器上运行的 if,因为 32 位累加器和 ALU 中的 64 位值将被“削减”在任何计算过程中,除了前 32 位的零之外,可能永远不会收到任何内容。