私はクラスを持っています:
class CMatrix4f
{
public:
CMatrix4f();
public:
__declspec(align(16)) float m[16];
};
このクラスは SSE を使用して行列演算を実装するため、動作させるには整合させるm
必要があります。ほとんどの場合は機能しますが、16 バイトで整列されていない_mm_load_ps
ため、SSE 命令を実行すると segfault が発生することがあります。m
これまでのところ、どのような場合に発生するのか理解できません。
私が行うと、整列することCMatrix4f * dynamicMatrix = new CMatrix4f();
が保証されますか?dynamicMatrix.m
クラスがある場合:
class MatrixWrapper {
public:
MatrixWrapper();
CMatrix4f _matrix;
};
そして、次のようにします。
MatrixWrapper * dynamicMatrixWrapper = new MatrixWrapper();
dynamicMatrixWrapper._matrix.m
整列することが保証されていますか?
アラインメントに関する MSDN の記事を読みましたが、動的割り当てで機能するかどうかは不明です。