如何使用posix_memalign动态分配64字节对齐的二维int数组
方案1:连续内存分配(推荐,与原生二维数组完全兼容)
静态声明的int x_train[4344][20]本身就是整块连续内存,你可以用指向一维数组的指针直接分配整块对齐内存,访问逻辑和原有写法完全一致:
// x_train是指向长度为20的int数组的指针 int (*x_train)[20]; posix_memalign((void**)(&x_train), 64, sizeof(int) * 4344 * 20);
分配完成后你依然可以用x_train[i][j]访问第i行第j个元素,内存布局和静态数组没有差异,释放时直接调用free(x_train)即可。
方案2:指针数组形式(仅适用于需要单独操作每行的场景)
如果你的场景需要单独分配/释放每行内存,可以用二级指针的方式实现,注意这种方式分配的内存不是整块连续的:
// 先分配存储4344个行指针的对齐内存 int** x_train; posix_memalign((void**)(&x_train), 64, sizeof(int*) * 4344); // 逐行分配对齐的内存空间 for (int i = 0; i < 4344; i++) { posix_memalign((void**)(&x_train[i]), 64, sizeof(int) * 20); }
释放时需要先逐行释放每一行的内存,再释放外层的指针数组,避免内存泄漏:
for (int i = 0; i < 4344; i++) { free(x_train[i]); } free(x_train);
内容的提问来源于stack exchange,提问作者JOJO
相关产品推荐
相关产品推荐

