[問題] array的定義放迴圈裡面或外面比較有效率?

作者: eagle32 (バスケがしたいです)   2014-12-17 11:35:02
問題:
考量程式的效率或其他層面,
array 或 vector 的定義放在迴圈裡面比較好還是外面比較好?
譬如: 我有一個array在每loop一次之前需要重新歸零,哪個做法比較好?
ps. 我不是資工相關背景
for(int n=0; n < N; n++)
{
double array[500]={0.0};
...
...
...
}
double array[500]
for(int n=0; n < N; n++)
{
memset(array, 0.0, 500*sizeof(double)); // 歸零
...
...
...
}
作者: tjjh89017 (伊達政宗)   2014-12-17 11:47:00
如果compiler處理得好,兩者效率會差不多
作者: loveme00835 (髮箍)   2014-12-17 13:29:00
你測過執行時間了嗎
作者: longlongint (華哥爾)   2014-12-17 13:42:00
locality 二維或多維陣列比較容易出問題 一維陣列就推一樓
作者: eagle32 (バスケがしたいです)   2014-12-17 15:37:00
沒有測過時間. 想說也許只要觀念正確答案應該是很明顯的.locality是什麼? 重要嗎?
作者: cjcat2266 (CJ Cat)   2014-12-17 16:03:00
locality of reference指的是存取各筆資料在記憶體的相鄰性,在同一個cache line的相鄰資料會同時被載入到快取記憶體,加速軟體方的存取速度所以以線性方式存取資料,會比隨機存取資料有效率這也是為什麼 for(i=0~N)for(j=0~N)array2D[i][j]的寫法會比 for(i=0~N)for(j=0~N)array2D[j][i] 理想locality挺重要,寫程式的同時最好謹記這個概念囉嗦完了,你用的是一維陣列,看起來也是在for迴圈裏面存取,能夠線性存取就線性存取
作者: eagle32 (バスケがしたいです)   2014-12-17 16:26:00
謝謝你們的指教 我沒有樓上講的觀念你說的線性存取就是順著記憶體位置讀取 避免跳來跳去對吧通常我需要塞一個多維的array 或 vector 到迴圈裡面
作者: kwpn (ITSST)   2014-12-18 13:13:00
測試也很重要,即使觀念讓你認為第2種效率較好,但是好多少呢?若只好一點點,對你整體程式影響幾乎可忽略,那應考選擇維護上比較好的

Links booklink

Contact Us: admin [ a t ] ucptt.com