VC中的结构体成员对齐会带来性能优势吗?如果这是使用它的最佳性能含义是什么,以及哪个尺寸最适合当前的CPU架构(x86_64,SSE2+,..)
当成员跨越缓存线边界时,性能在 x86 和 x64 核心上急剧下降。 常见的编译器默认值是 8 字节打包,这确保您可以处理 long long、double 和 64 位指针成员。
SSE2指令需要16位对齐,如果关闭的话代码会崩溃。 您无法从打包编译指示中得到这一点,例如堆分配器将仅提供 8 字节对齐保证。 找出您的编译器和 CRT 支持的内容。 类似于 __declspec(align(16)) 和自定义分配器(例如 _aligned_malloc())。 或者过度分配内存并自行调整指针。
编译器使用的默认对齐方式应适合一般数据的目标平台(32 位或 64 位 Intel/AMD)。 要利用 SIMD,您可能必须对这些数组使用更严格的对齐方式,但这通常是通过
#pragma
或仅适用于您将在 SIMD 指令中使用的数据的特殊数据类型来完成的。