C++ 在寄存器上加载双精度浮点值时出错?

C++ 在寄存器上加载双精度浮点值时出错?,c++,C++,我试图学习一些使用内在函数的操作,但是当我在寄存器上简单加载双精度值时,如下面所示,它会导致内存访问冲突错误。我肯定我犯了一些天真的错误。你能指出我的错误是什么吗 double a[2] = {10,12}; double * poinTer = &a[0]; __m128d v = _mm_load_pd(poinTer); 谢谢 传递给的地址必须是16字节对齐的。您需要采取措施确保这一点。a必须是16位对齐的;根据编译器的不同,您必须将其标记为\uuuu declspec(alig

我试图学习一些使用内在函数的操作,但是当我在寄存器上简单加载双精度值时,如下面所示,它会导致内存访问冲突错误。我肯定我犯了一些天真的错误。你能指出我的错误是什么吗

double a[2] = {10,12};
double * poinTer = &a[0];
__m128d v = _mm_load_pd(poinTer);

谢谢

传递给
的地址必须是16字节对齐的。您需要采取措施确保这一点。

a
必须是16位对齐的;根据编译器的不同,您必须将其标记为
\uuuu declspec(align(16))
(VC++)或
\uuuu属性(aligned(16))
(gcc)

阵列未正确对齐。取决于您使用的编译器,对于MSVC,它是uu declspec(align(16))double a[2]={10,12};对于GCC,它是
\uuuuuuuuuuuuuuuu属性((对齐(16))