为什么 long long 值与 8 字节边界对齐?
Why are long long values aligned to an 8 byte boundary?
我知道 double
对齐到 8 字节边界,因为这对浮点指令更有帮助。但为什么 long long
也与 8 字节边界对齐?
最可能的解释是硬件架构在 8 字节对齐时提供更快的 long long
读写。
郑重声明,使 double
类型 8 字节对齐的推理是相同的。实际的浮点算术运算是使用寄存器到寄存器指令实现的。内存对齐与寄存器到寄存器操作无关。内存对齐仅与涉及内存读写的指令的性能相关。
一个可能的解释是 long long
和 double
变量都是 8 字节长。当您不将它们与 8 字节边界对齐时,如果变量在页面结束前 3 个字节开始并在下一页中保留 5 个字节,则它们可能会跨越两页内存。这可能会导致性能开销,因为读取该变量可能需要 获取 两页内存(写入它会修改两页内存而不是一页)。还讨论了其他低级性能影响 here。
我知道 double
对齐到 8 字节边界,因为这对浮点指令更有帮助。但为什么 long long
也与 8 字节边界对齐?
最可能的解释是硬件架构在 8 字节对齐时提供更快的 long long
读写。
郑重声明,使 double
类型 8 字节对齐的推理是相同的。实际的浮点算术运算是使用寄存器到寄存器指令实现的。内存对齐与寄存器到寄存器操作无关。内存对齐仅与涉及内存读写的指令的性能相关。
一个可能的解释是 long long
和 double
变量都是 8 字节长。当您不将它们与 8 字节边界对齐时,如果变量在页面结束前 3 个字节开始并在下一页中保留 5 个字节,则它们可能会跨越两页内存。这可能会导致性能开销,因为读取该变量可能需要 获取 两页内存(写入它会修改两页内存而不是一页)。还讨论了其他低级性能影响 here。