C语言 在 malloc 分配的加载数组中出现访问冲突



我有一个数组,由malloc按以下方式分配:

double * a = ( double * ) malloc( lda * (k+1) * sizeof( double ) );  

其中 lda=1000k 是 40 的倍数。

然后我尝试在以下所述代码的寄存器中加载 a 的值

reg = _mm_load_pd( (double *) & a[ (p*lda)+0 ]);

其中p是循环中控制的索引。

此代码生成访问冲突错误。

我知道要使用_mm_load_pd数组必须与 16 字节对齐。malloc不是已经对齐了吗?那么为什么会导致访问冲突错误?还有什么我可能缺少的吗?

谢谢。

malloc通常只保证 8 字节对齐(double 的对齐

)。

如果你想要 16 字节对齐,你可以自己填充分配并适当调整指针,或者根据您的平台使用 posix_memalign/_aligned_malloc 来获得必要的对齐。

相关内容

  • 没有找到相关文章

最新更新