我已经阅读了有关posix_memalign()
的文档。我还是不知道如何处理这个The value of alignment shall be a power of two multiple of sizeof(void *).
此外,我需要一些错误消息来检查对齐是否成功。
我需要为以下数组分配与64字节对齐的内存以及用于检查的错误消息。
int array_dataset [5430][20];
int X_train [4344][20];
int Y_train[4344];
int data_point [20];
int Y-test [1068];
int X_test [1068][20];
posix_memalign
分配对齐堆内存(类似于malloc),因此不能与静态或自动数组一起使用,如您所示。相反,变量需要是用来访问内存
int *Y_train = 0;
if (posix_memalign(&Y_train, 64, 4344*sizeof(*Y_train)) {
... there was an error
请注意,对于奇数大小的2D数组,这可能是一个问题。你可以声明
int (*array_dataset)[20] = 0;
if (posix_memalign(&array_dataset, 64, 5340*sizeof(*array_dataset)) {
,但是这样做只会对齐第一个子数组——array[0]
将在64字节边界上对齐。但是因为sizeof(int[20])不是64的倍数(可能是80,但在某些机器上可能是40或160),所以array[1]
不会对齐。您可能希望使用int (*array_dataset)[32];
来避免这种情况。或者交换索引,使用int (*array_dataset)[5440]
——这完全取决于你想做什么,以及为什么你想要对齐内存。