作者VictorTom (鬼翼&娃娃鱼)
看板C_and_CPP
标题Re: [问题] 请问该怎麽把阵列全清为0?
时间Tue Jun 2 22:48:32 2009
※ 引述《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