2

ネット上のほとんどのチュートリアルまたはコードスニペットでは、次のように表示されます。

float *arr= (float*) _aligned_malloc(length * sizeof(float), 16);
__m128 *m1 = (__m128*)arr;

これは厳密なエイリアシングルールに違反していますか?確かにそうだと思いますが、チュートリアルの作成者はすべて、便宜上それを無視していません。__m128はfloat [4]を含むユニオンであるため、複雑な部分を誤解している可能性があります。

4

2 に答える 2

2

それは違反していません-まだ。ただし、一方のポインタを介して書き込み、もう一方を介して読み取ると、厳密なエイリアシングに違反します。

代わりに、次のような関数を使用する必要があります。

于 2011-08-10T02:19:00.257 に答える