我有一个由 malloc
按以下方式分配的数组:
double * a = ( double * ) malloc( lda * (k+1) * sizeof( double ) );
其中 lda=1000
和 k
是 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
来获得必需的对齐。
关于c - 加载由 malloc 分配的数组时发生访问冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27194073/