对不起,如果问题听起来很愚蠢.我只是模糊地认识到数据对齐的问题,并且从未做过任何64位编程.我正在研究一些32位x86代码.它经常访问一个int数组.有时会读取一个32位整数.有时读两个或更多.在某些时候,我想将代码设置为64位.我不确定是否应该将此int数组声明为int或long int.我宁愿保持整数的宽度相同,所以我不必担心差异.虽然读取/写出与自然字不对齐的地址可能会很慢,但我有点担心.
解决方法
仅当装载或存储穿过对齐边界时才会发生未对齐惩罚.边界通常是较小的:
>硬件的自然字大小. (32位或64位*)
>数据类型的大小.
如果您在64位(8字节)架构上加载一个4字节字.它不需要8字节对齐.它只需要4字节对齐.
同样,如果您在任何计算机上加载1字节字符,则根本不需要对齐.
*请注意,SIMD向量可能意味着更大的自然字大小.例如,16字节SSE仍然需要在x86和x64上进行16字节对齐. (除非显式错位负载/存储)
简而言之,您不必担心数据对齐.语言和编译器非常努力地阻止您不必担心它.
因此,坚持使用对您来说最有意义的数据类型.