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

前端之家收集整理的这篇文章主要介绍了c – 是否存在性能损失访问x86-64中的32位整数数组?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对不起,如果问题听起来很愚蠢.我只是模糊地认识到数据对齐的问题,并且从未做过任何64位编程.我正在研究一些32位x86代码.它经常访问一个int数组.有时会读取一个32位整数.有时读两个或更多.在某些时候,我想将代码设置为64位.我不确定是否应该将此int数组声明为int或long int.我宁愿保持整数的宽度相同,所以我不必担心差异.虽然读取/写出与自然字不对齐的地址可能会很慢,但我有点担心.

解决方法

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

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

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

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

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

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

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

原文链接:https://www.f2er.com/c/119152.html

猜你在找的C&C++相关文章