【发布时间】:2016-04-02 22:42:35
【问题描述】:
为什么在 32 位 x86 ABI 中 int64_t(例如 long long)的默认对齐方式是 8 字节? 4 字节对齐似乎没问题,因为它只能作为两个 4B 半来访问。
【问题讨论】:
-
stackoverflow.com/questions/1054657 的可能重复项:“通常的经验法则(直接来自 Intel 和 AMD 的优化手册)是每种数据类型都应该按照自己的大小对齐。
int32应该在 32 位边界上对齐,int64在 64 位边界上对齐,依此类推。char 适合任何地方。" Along long大小为 64 位,因此它是使用 8 字节对齐进行最佳对齐。 -
@RemyLebeau 是的,我知道。我一直在寻找经验法则背后的推理。您链接的问题提到 32 位处理器具有 64 位数据总线,然后 8 字节对齐是有意义的。谢谢!
-
我所知道的所有 32 位 C 和 C++ 编译器(但我没有得到太多)努力使 64 位类型与 8 对齐。这对 最重要double,当它们不对齐时访问它们是非常昂贵的,当它跨越缓存线时是胖 x3。你是否也不清楚,很奇怪 SO 用户将编译器的名称保密。
-
@HansPassant 你说的胖 x 3 是什么意思?我有 64 位编译器。我阅读了有关对齐要求的维基百科文章,并在那里提到了这一点。
-
慢 3 倍以上。如果您使用 64 位编译器,那么关于 32 位 x86 架构的问题就完全无关紧要了。
标签: c++ x86 memory-alignment