加载由malloc分配的数组中的访问冲突?

时间:2014-11-28 18:15:29

标签: c arrays 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是否已经进行了对齐?为什么然后它会导致访问冲突错误?还有什么我可能会遗失的吗?

感谢。

1 个答案:

答案 0 :(得分:1)

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

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