为什么长长值与 8 字节边界对齐

Why are long long values aligned to an 8 byte boundary?

本文关键字:边界 对齐 字节 为什么      更新时间:2023-10-16

我知道double与 8 字节边界对齐,因为这对浮点指令更有帮助。但是,为什么long long也与 8 字节边界对齐?

最可能的解释是,硬件架构在 8 字节对齐时提供更快的long long读写速度。

作为记录,使double类型 8 字节对齐的理由是相同的。 实际的浮点算术运算是使用寄存器到寄存器指令实现的。 内存对齐与寄存器到寄存器操作无关。 内存对齐仅与涉及内存读取和写入的指令的性能相关。

一种可能的解释是long longdouble变量的长度均为 8 个字节。如果不将它们与 8 字节边界对齐,如果变量在页末之前从 3 个字节开始并在下一页中保留 5 个字节,则它们可能会跨越两页内存。这可能会导致性能开销,因为读取该变量可能需要获取两页内存(写入该变量将修改两页内存而不是一页内存)。此处还讨论了其他低级别性能影响。