VC 中结构体成员对齐的大小会带来性能优势?

问题描述 投票:0回答:2

VC中的结构体成员对齐会带来性能优势吗?如果这是使用它的最佳性能含义是什么,以及哪个尺寸最适合当前的CPU架构(x86_64,SSE2+,..)

c++ visual-studio alignment cpu
2个回答
1
投票

当成员跨越缓存线边界时,性能在 x86 和 x64 核心上急剧下降。 常见的编译器默认值是 8 字节打包,这确保您可以处理 long long、double 和 64 位指针成员。

SSE2指令需要16位对齐,如果关闭的话代码会崩溃。 您无法从打包编译指示中得到这一点,例如堆分配器将仅提供 8 字节对齐保证。 找出您的编译器和 CRT 支持的内容。 类似于 __declspec(align(16)) 和自定义分配器(例如 _aligned_malloc())。 或者过度分配内存并自行调整指针。


0
投票

编译器使用的默认对齐方式应适合一般数据的目标平台(32 位或 64 位 Intel/AMD)。 要利用 SIMD,您可能必须对这些数组使用更严格的对齐方式,但这通常是通过

#pragma
或仅适用于您将在 SIMD 指令中使用的数据的特殊数据类型来完成的。

© www.soinside.com 2019 - 2024. All rights reserved.