看板 C_and_CPP 關於我們 聯絡資訊
問題(Question): 精華區3-3-3有提供幾種動態宣告多維陣列的方式 我自己google找到用malloc宣告的方式: http://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/ 不知道這樣用malloc能不能符合連續儲存的條件? (連續儲存好像比較快?) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 90.41.134.196 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1433853740.A.856.html
Feis: C++ 可以嗎? #1IvruEtP 06/09 20:56
wtchen: 看來精華區該多收些Feis的好文... 06/09 21:09
Feis: 我回完才發現 3-3-3 就說一樣的事 @@ 06/09 21:11
wtchen: 用malloc宣告跟3-3-3效率會有差嗎? 06/09 22:54
Feis: 為什麼你覺得有差? 06/09 23:02
wtchen: 如果用gcc compile的話只支援malloc 06/09 23:05
wtchen: 我看起來是沒差的 06/09 23:07
bibo9901: 你也可以一次malloc出所有需要的記憶體 06/10 01:12
bibo9901: 例如想要 int[n][m], 那總共需要 n*m*sizeof(int) 06/10 01:14
bibo9901: + n * sizeof(int*) 這麼多空間, 然後把前面 n 個 int* 06/10 01:14
bibo9901: 指到正確位址上 06/10 01:14
bibo9901: 假設 int **arr 是你要的陣列, char * p = malloc(...) 06/10 01:17
bibo9901: 那麼arr[i] = p + n*sizeof(int*) + i*m*sizeof(int) 06/10 01:17
bibo9901: 這樣既是你要的連續儲存,又只需要一次 free 06/10 01:18
bibo9901: 啊XD 就是你網址裡的第4種方法 06/10 01:20
arthur104: 推樓上,pointer用的好,沒煩惱 06/10 01:22
bibo9901: 另外 new 和 malloc 最明顯的差異是 new 會自動呼叫 06/10 01:32
bibo9901: trivial constructor, 理論上是會比 malloc 來得慢 06/10 01:33
LPH66: 這裡是 new 陣列應該沒有差... 06/10 02:04
wtchen: 因為之後想玩底層,所以希望能多了解最有效率的方法 06/10 22:01
wtchen: 精華區3-3-3用的new不合我需求,所以才想用malloc 06/10 22:01
wtchen: 感謝各位解說 06/10 22:02
Killercat: 你要快就是用placement new做memory pool 06/12 16:26
Killercat: 在C++裡面糾結new或者malloc講真的沒啥意義.... 06/12 16:26
BlazarArc: 同意樓上 06/24 23:46