为什么对“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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...