我有一堂课:
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 文章,但尚不清楚它是否适用于动态分配。