c - 加载由 malloc 分配的数组时发生访问冲突?

标签 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 不是已经完成了对齐吗?那么为什么会导致访问冲突错误呢?还有什么我可能遗漏的吗?

谢谢。

最佳答案

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

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

关于c - 加载由 malloc 分配的数组时发生访问冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27194073/

相关文章:

将 gcc 内联汇编转换为 ml64

javascript - 如何使用 for 语句和数组确定单击了哪个元素

c++ - 增量数组

fclose 后无法释放 fileName char *

c - 使用数组的段错误 11

在 C 中将字节数组转换为 int 数组

c++ - 在不同环境中正确使用 C 虚拟函数替换

c - 未遵循 "if"上的语句

c++11 使用 std::fill 填充二维动态分配数组

c - malloc 和 calloc