※ 引述《rdfs (learning)》之銘言:
: 推 ianfang:memset 06/02 21:06
: 推 ianfang:高維一樣 06/02 21:16
: 推 hichcock:ZeroMemory 06/02 21:27
: 推 VictorTom:如果是malloc/new回來的多維陣列可能要跑迴圈memset 06/02 21:33
: → VictorTom:因為不能保證當初跑迴圈要的mem一定會連續@_@" 06/02 21:34
: → VictorTom:所以常見的策略是只要一維array, 再用pointer指成多維. 06/02 21:35
: → VictorTom:這樣搭memset或其他mem函數就會比較有效率:) 06/02 21:35
: 推 QQ29:請問樓上有沒有example阿@@ 看不是很了解又很想知道是什麼 06/02 21:53
Example??大概就像下面這個樣子吧....
int w = 128, h = 128; // 只是舉個例, 就假裝I/O後要這樣的吧....
int *raw = new int[w*h];
int **array2D = new int*[h];
for(int i=0; i<h; ++i) array2D[i] = raw + i*w;
所以當你需要空間關係比如做covolution運算時你有array2D[i][j]方便用....
當只要sequential處理像調亮度/inverse等的時候用loop直接對raw[]處理....
包含想使用memset, memcpy等functions時也不用擔心memory連續性的問題....
主要是以前做影像處理, 一些功能直接對raw[]做理論上可以gain一點效能....
然後對array2D[][]應該也沒有衝擊; 當然和static alloc可能不能比就是@_@"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.41.192.14