如何使用posix_memalign动态分配 64B 对齐的指针的 2D 数组



我有两个数组,y_train是1D数组,x_train是2D数组。我需要使用posix_memalign动态分配这两个数组。我对y_train做的是正确的。其中我将int y_train[4344]转换为以下代码:

int* Y_train;
posix_memalign((void**)(&Y_train), 64, sizeof(int) * 4344);

现在,我想以同样的方式转换int x_train[4344][20];,但不确定如何。

获取完整大小的内存块,并将其分配给正确类型的指针:

void *ptr;
posix_memalign(&ptr, 64, sizeof(int) * 4344);
int *Y_train = (int*)ptr;
posix_memalign(&ptr, 64, sizeof(int) * 20 * 4344);
int (*x_train)[20] = (int (*)[20])ptr;

现在整个二维数组是正确对齐的,但不是所有的内部数组都是正确对齐的,因为20 * sizeof(int)不是64的倍数。

当你需要20ints的每个内部数组正确对齐时,你必须添加填充字节,12ints,然后每个内部数组都有128字节。

posix_memalign(&ptr, 64, sizeof(int) * 32 * 4344);
int (*x_train)[32] = (int (*)[32])ptr;

请忽略最后一个12ints。

相关内容

  • 没有找到相关文章

最新更新