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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com