这是一本关于内存中原始类型的数据对齐的书。
Microsoft Windows 提出了更严格的对齐要求——任何 K 字节的原始对象,对于 K = 2、4 或 8,其地址必须是 K 的倍数。特别是,它要求 double 或 long 的地址long 是 8 的倍数。此要求以浪费一些空间为代价来提高内存性能。Linux 约定,其中 8 字节值在 4 字节边界上对齐可能对 i386 有利,当时内存稀缺且内存接口只有 4 字节宽。对于现代处理器,微软的调整是一个更好的设计决策。数据类型 long double,gcc 为其生成分配 12 个字节的 IA32 代码(即使实际数据类型只需要 10 个字节)在 Windows 和 Linux 中都有 4 字节对齐要求。
问题是:
- 是什么强加了数据对齐、操作系统或编译器?
- 我可以更改它还是修复它?