在网上的大多数教程或代码片段中都会看到以下内容:
float *arr= (float*) _aligned_malloc(length * sizeof(float), 16);
__m128 *m1 = (__m128*)arr;
这是否违反了严格的别名规则?我认为它确实如此,但是当然所有这些教程编写者都不会为了方便而忽略它,因为__m128是一个包含float的联合[4],也许我误解了一些错综复杂的部分。
答案 0 :(得分:2)
答案 1 :(得分:1)
这是GCC的编译器特定答案
xmmintrin header for GCC 4.4.3定义了以下内容:
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
所以,是的,你违反了严格的别名,但你可以使用那种类型。奇怪的是,__v4sf
类型未标记为__may_alias__
,因此无法以此方式使用。