[問題] 動態宣告2維陣列的方式(看過精華區3-3-3)

看板C_and_CPP作者 (沒有存在感的人)時間9年前 (2015/06/09 20:42), 編輯推噓2(2023)
留言25則, 7人參與, 最新討論串1/1
問題(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

06/09 20:56, , 1F
C++ 可以嗎? #1IvruEtP
06/09 20:56, 1F

06/09 21:09, , 2F
看來精華區該多收些Feis的好文...
06/09 21:09, 2F

06/09 21:11, , 3F
我回完才發現 3-3-3 就說一樣的事 @@
06/09 21:11, 3F

06/09 22:54, , 4F
用malloc宣告跟3-3-3效率會有差嗎?
06/09 22:54, 4F

06/09 23:02, , 5F
為什麼你覺得有差?
06/09 23:02, 5F

06/09 23:05, , 6F
如果用gcc compile的話只支援malloc
06/09 23:05, 6F

06/09 23:07, , 7F
我看起來是沒差的
06/09 23:07, 7F

06/10 01:12, , 8F
你也可以一次malloc出所有需要的記憶體
06/10 01:12, 8F

06/10 01:14, , 9F
例如想要 int[n][m], 那總共需要 n*m*sizeof(int)
06/10 01:14, 9F

06/10 01:14, , 10F
+ n * sizeof(int*) 這麼多空間, 然後把前面 n 個 int*
06/10 01:14, 10F

06/10 01:14, , 11F
指到正確位址上
06/10 01:14, 11F

06/10 01:17, , 12F
假設 int **arr 是你要的陣列, char * p = malloc(...)
06/10 01:17, 12F

06/10 01:17, , 13F
那麼arr[i] = p + n*sizeof(int*) + i*m*sizeof(int)
06/10 01:17, 13F

06/10 01:18, , 14F
這樣既是你要的連續儲存,又只需要一次 free
06/10 01:18, 14F

06/10 01:20, , 15F
啊XD 就是你網址裡的第4種方法
06/10 01:20, 15F

06/10 01:22, , 16F
推樓上,pointer用的好,沒煩惱
06/10 01:22, 16F

06/10 01:32, , 17F
另外 new 和 malloc 最明顯的差異是 new 會自動呼叫
06/10 01:32, 17F

06/10 01:33, , 18F
trivial constructor, 理論上是會比 malloc 來得慢
06/10 01:33, 18F

06/10 02:04, , 19F
這裡是 new 陣列應該沒有差...
06/10 02:04, 19F

06/10 22:01, , 20F
因為之後想玩底層,所以希望能多了解最有效率的方法
06/10 22:01, 20F

06/10 22:01, , 21F
精華區3-3-3用的new不合我需求,所以才想用malloc
06/10 22:01, 21F

06/10 22:02, , 22F
感謝各位解說
06/10 22:02, 22F

06/12 16:26, , 23F
你要快就是用placement new做memory pool
06/12 16:26, 23F

06/12 16:26, , 24F
在C++裡面糾結new或者malloc講真的沒啥意義....
06/12 16:26, 24F

06/24 23:46, , 25F
同意樓上
06/24 23:46, 25F
文章代碼(AID): #1LTjyiXM (C_and_CPP)