在x86-64中是否存在性能损失访问32位整数数组?

cle*_*ong 7 c c++ x86-64

对不起,如果问题听起来很愚蠢.我只是模糊地认识到数据对齐的问题,并且从未做过任何64位编程.我正在研究一些32位x86代码.它经常访问int数组.有时会读取一个32位整数.有时读两个或更多.在某些时候,我想将代码设置为64位.我不确定是否应该将此int数组声明为intlong int.我宁愿保持整数的宽度相同,所以我不必担心差异.虽然读取/写出与自然单词不对齐的地址可能会很慢,但我有点担心.

Mys*_*ial 7

仅当加载或存储穿过对齐边界时才会发生未对齐惩罚.边界通常是较小的:

  • 硬件的自然字大小.(32位或64位*)
  • 数据类型的大小.

如果您在64位(8字节)架构上加载一个4字节字.它不需要8字节对齐.它只需要4字节对齐.

同样,如果您在任何计算机上加载1字节字符,则根本不需要对齐.

*请注意,SIMD向量可能意味着更大的自然字大小.例如,16字节SSE仍需要在x86和x64上进行16字节对齐.(除非显式错位负载/存储)


简而言之,您不必担心数据对齐.语言和编译器非常努力地阻止您不必担心它.

因此,坚持使用对您来说最有意义的数据类型.