微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么对“long double”进行 16 字节对齐?

如何解决为什么对“long double”进行 16 字节对齐?

像 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 举报,一经查实,本站将立刻删除。