Is Int64 Aligned to 4 Bytes or 8 Bytes on a 32-bit Architecture?
💡
原文英文,约800词,阅读约需3分钟。
📝
内容提要
本文讨论了CLI Spec(ECMA-335)关于基元类型对齐规则的描述,验证了8字节数据类型在x86/x64机器上的对齐字节,并提出了问题。引用了相关说法和实验结果。
🎯
关键要点
- CLI Spec(ECMA-335)描述了基元类型的对齐规则。
- 8字节数据类型在x86/x64机器上的对齐字节分别为4字节和8字节。
- 1字节、2字节和4字节数据在相应的边界上对齐。
- 8字节数据在底层硬件要求的边界上对齐,以便进行原子访问。
- 在64位机器上模拟32位平台时,需将PlatformTarget属性设置为x86。
- 演示程序中定义了一个包含byte和ulong字段的结构体Record。
- 验证程序输出显示当前环境与CLI Spec描述一致,但ulong字段的对齐长度为8字节而非4字节。
- 尚未找到关于ulong类型对齐规则的权威答案,可能是对CLI Spec的解读或验证程序存在问题。
- 进行了补充实验,证明ulong类型的对齐规则与CLI Spec一致。
- 在x64和x86平台上,long类型的对齐规则分别为8字节和4字节,但在x86上某些断言不能保证成立。
➡️