为什么长长值与 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 个字节,则它们可能会跨越两页内存。这可能会导致性能开销,因为读取该变量可能需要获取两页内存(写入该变量将修改两页内存而不是一页内存)。此处还讨论了其他低级别性能影响。
相关文章:
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 在 64 位边界上对齐C++结构数组?
- C++11:16 字节原子<>变量是否在 16 字节边界上自动对齐,从而允许CMPXCHG16B指令?
- 点云库旋转轴对齐边界框
- 将缓冲区与 N 字节边界对齐,而不是 2N 字节边界?
- 在 C/C++ 中在特定地址边界上对齐内存是否仍能提高 x86 性能?
- 浮点数组是否始终与16字节边界对齐
- 由于 FPU 或缓存而与 8 字节边界对齐的双精度
- 为什么长长值与 8 字节边界对齐
- 为什么 Dalvik 监视器在 8 字节边界上对齐
- 为什么缓冲区应该在 64 字节边界上对齐以获得最佳性能
- 在未对齐的字节边界上高效打包 10 位数据
- Qt4 QTableWidget使列根据内容调整大小、交互式并与表边界对齐
- 轴对齐边界框碰撞检测问题
- 为什么128位变量应该对齐到16字节边界
- 为什么Malloc()关心边界对齐
- 关于指针对齐,有没有一种方法可以使指针与给定的内存边界对齐
- 如何在平移/旋转后重新计算轴对齐的边界框