作者DrStein (啤酒肚)
看板C_and_CPP
標題Re: [問題] row-major的問題
時間Sun Mar 20 00:36:30 2011
※ 引述《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
→ loveme00835:row/col major 那邊好像講剛好相反? 03/20 00:41
thx 已修改
※ 編輯: DrStein 來自: 115.43.138.67 (03/20 00:44)
→ akasan:其實數組個人認為很容易讓人以為是 tuple 耶... 03/20 00:56
→ Seprim:原po大陸人 (確認 03/20 03:04
推 CRAZYFAN:數組應該是matrix中國那邊的翻譯?! 03/20 03:17
→ DrStein:數組-> Array, matrix-> 矩陣(專指二維) 03/20 03:20
※ 編輯: DrStein 來自: 115.43.138.67 (03/20 03:31)
推 legnaleurc:這邊的 tuple 應該是譯為數組,而且我第一次聽到陣列 03/23 21:40
→ legnaleurc:專指二維 03/23 21:40