我有兩個陣列,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];相同的方式轉換,但不確定如何轉換。
uj5u.com熱心網友回復:
獲取完整大小的記憶體塊并將其分配給正確型別的指標:
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 ints,然后每個內部陣列都有128位元組。
posix_memalign(&ptr, 64, sizeof(int) * 32 * 4344);
int (*x_train)[32] = (int (*)[32])ptr;
只需忽略最后一個12 ints。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/331439.html
