我有一堂课:
class CMatrix4f
{
public:
CMatrix4f();
public:
__declspec(align(16)) float m[16];
};
此类使用 SSE 实现矩阵运算,因此m
必须对齐才能使其工作。它在大多数情况下都有效,但有时在执行 SSE 指令时会出现段错误,例如_mm_load_ps
因为m
不是 16 字节对齐。到目前为止,我无法理解它发生在哪些情况下。
当我这样做时CMatrix4f * dynamicMatrix = new CMatrix4f();
,是否dynamicMatrix.m
保证对齐?
如果我有一堂课:
class MatrixWrapper {
public:
MatrixWrapper();
CMatrix4f _matrix;
};
然后做:
MatrixWrapper * dynamicMatrixWrapper = new MatrixWrapper();
dynamicMatrixWrapper._matrix.m
保证对齐?
我已阅读有关对齐的 MSDN 文章,但尚不清楚它是否适用于动态分配。