如何使用 posix_memalign 动态分配 64B 对齐的二维指针数组
How to dynamically allocate 2D array of pointer that's 64B aligned using posix_memalign
我有两个数组,y_train
是一维数组,x_train
是二维数组。我需要使用 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
的倍数。
当你需要20
int
s的每个内部数组正确对齐时,你必须添加填充字节,12
int
s,然后每个内部数组数组有 128
个字节。
posix_memalign(&ptr, 64, sizeof(int) * 32 * 4344);
int (*x_train)[32] = (int (*)[32])ptr;
忽略最后一个 12
int
s.
我有两个数组,y_train
是一维数组,x_train
是二维数组。我需要使用 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
的倍数。
当你需要20
int
s的每个内部数组正确对齐时,你必须添加填充字节,12
int
s,然后每个内部数组数组有 128
个字节。
posix_memalign(&ptr, 64, sizeof(int) * 32 * 4344);
int (*x_train)[32] = (int (*)[32])ptr;
忽略最后一个 12
int
s.