问题描述
像 x86-64 这样的 64 位架构的字长为 64 位。在这种情况下,如果内存访问跨越字边界,那么访问数据所需的时间将翻倍。所以需要对齐。 - 这就是我所知道的。如果我错了,请纠正我。
现在,对于非填充大小为 10 字节的 long double
,GCC 使用 16 字节 alignment(msvc 至少使用 8 字节对齐)。但无论如何,8 字节对齐需要 2 个读取周期,16 字节对齐也是如此。那么为什么更严格的 16 字节对齐呢?除了我上面提到的,对齐的目的是什么?
此外,实际上,由于 long double
(80 位 x87 扩展 FP)的非填充部分是 10 字节,因此实际上 4 字节对齐就足够了。在这种情况下,它也可以在 2 个读取周期(4-6 或 8-2)内读取数据。所以,还要解释这个假设哪里出错了。
(实际的 sizeof(long double)
在 i386 System V ABI 中为 12,在 x86-64 System V 中为 16。它们各自 alignof()
的 4 和 16 的倍数)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)