x86-64 - 为什么 `long double` 需要 16 字节对齐?
问题描述
像 x86-64 这样的 64 位架构的字长为 64 位。在这种情况下,如果内存访问跨越字边界,那么访问数据将需要双倍的时间。所以需要对齐。- 这就是我所知道的。如果我错了,请纠正我。
现在,GCC 使用 16 字节对齐(msvc 至少使用 8 字节对齐),long double
其非填充大小为 10 字节。但无论如何,8 字节对齐需要 2 个读取周期,16 字节对齐也是如此。那么为什么要更严格的 16 字节对齐呢?除了我上面提到的之外,对齐的目的是什么?
long double
此外,事实上,由于(80 位 x87 扩展 FP)的非填充部分是 10 字节,实际上 4 字节对齐就足够了。在这种情况下,它也可以在 2 个读取周期(4-6 或 8-2)内读取数据。所以,还要解释这个假设哪里出错了。
(在 i386 System V ABI 中实际sizeof(long double)
是 12,在 x86-64 System V 中是 16。它们各自alignof()
的 4 和 16 的倍数)
解决方案
推荐阅读
- python - 将前行详细信息存储在 Dataframe 中的字典列表中
- javascript - 如何将 C# 变量的值分配给 asp.net 更新面板内的 javascript 变量
- javascript - 按不同数组中设置的属性类型分隔项目
- sql - 检索sql查询
- angular - 在 Material2 中打开 mat-menu 时使用 mat-input
- swift - 缓存溢出的图像处理
- css - Flexbox:水平显示列?
- javascript - 如何改变
在输入框值中标记内容?
- python-3.x - Flask:如何从渲染列表中获取文件发送到另一个路由进行解析
- javascript - SpeechSynthesisUtterance onboundary 事件未正确触发