Re: [問題] row-major的問題
※ 引述《popopupu (碰碰碰碰碰碰碰碰碰碰碰)》之銘言:
: 我想請問一下
: 如果一個3維陣列
: A[3][4][5] 是row-major的
: 這樣應該怎麼排列呢?
: 我知道row major是先把一個row裡面每一個值
: 依序丟到記憶體裡
: 二維的會算
: 但三維的就不會了
: 可以請大家解說一下嗎~
數組(很不喜歡陣列這詞,會讓人誤以為是講死2維):
假設 大小是A[N][M][L]
row major (ex : C/C++):
A[i][j][k] -> A[ (i * M + j) * L + k) ]
cloumn major (ex : fortran)
A(i, j, k) -> A( i + N * (j + k * M) )
但若是用指標來開,就不一定嚕。
用二維來講,大小為N*M;
int **A;
A = (int**)malloc(N*sizeof(int*));
/*
這行意思是 開一塊空間來存N個int的指標
這空間的首位置坐標,放在A裡面
*/
/*再接下來,開N塊長度為M*sizeof(int)的紀憶體空間
, 分別把其首位置座標,放在剛剛的開的那塊空間裡
*/
for(int i = 0; i< N; i++)
*(A + i) = (int*)malloc(M*sizeof(int));
住意,這時"大多時候"後面開的記憶體是連續的。
但有時分配到的,有幾塊可能是"畸零地"
既該區塊,原為非使用,
但前後為使用中之記憶體區塊。
雖然機會不是很大, 但還是有一定的可能性。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.43.138.67
→
03/20 00:41, , 1F
03/20 00:41, 1F
thx 已修改
※ 編輯: DrStein 來自: 115.43.138.67 (03/20 00:44)
→
03/20 00:56, , 2F
03/20 00:56, 2F
→
03/20 03:04, , 3F
03/20 03:04, 3F
推
03/20 03:17, , 4F
03/20 03:17, 4F
→
03/20 03:20, , 5F
03/20 03:20, 5F
※ 編輯: DrStein 來自: 115.43.138.67 (03/20 03:31)
推
03/23 21:40, , 6F
03/23 21:40, 6F
→
03/23 21:40, , 7F
03/23 21:40, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):