→ tjjh89017: 如果compiler處理得好,兩者效率會差不多 12/17 11:47
→ loveme00835: 你測過執行時間了嗎 12/17 13:29
推 longlongint: locality 二維或多維陣列比較容易出問題 一維陣列就 12/17 13:42
→ longlongint: 推一樓 12/17 13:42
→ eagle32: 沒有測過時間. 想說也許只要觀念正確答案應該是很明顯的. 12/17 15:37
→ eagle32: locality是什麼? 重要嗎? 12/17 15:38
推 cjcat2266: locality of reference指的是存取各筆資料在記憶體的 12/17 16:03
→ cjcat2266: 相鄰性,在同一個cache line的相鄰資料會同時被載入到 12/17 16:04
→ cjcat2266: 快取記憶體,加速軟體方的存取速度 12/17 16:05
→ cjcat2266: 所以以線性方式存取資料,會比隨機存取資料有效率 12/17 16:06
→ cjcat2266: 這也是為什麼 for(i=0~N)for(j=0~N)array2D[i][j] 12/17 16:07
→ cjcat2266: 的寫法會比 for(i=0~N)for(j=0~N)array2D[j][i] 理想 12/17 16:08
→ cjcat2266: locality挺重要,寫程式的同時最好謹記這個概念 12/17 16:10
→ cjcat2266: 囉嗦完了,你用的是一維陣列,看起來也是在for迴圈裏面 12/17 16:11
→ cjcat2266: 存取,能夠線性存取就線性存取 12/17 16:12
→ eagle32: 謝謝你們的指教 我沒有樓上講的觀念 12/17 16:26
→ eagle32: 你說的線性存取就是順著記憶體位置讀取 避免跳來跳去對吧 12/17 16:29
→ eagle32: 通常我需要塞一個多維的array 或 vector 到迴圈裡面 12/17 16:31
推 kwpn: 測試也很重要,即使觀念讓你認為第2種效率較好,但是好多少呢? 12/18 13:13
→ kwpn: 若只好一點點,對你整體程式影響幾乎可忽略,那應考選擇維護上 12/18 13:14
→ kwpn: 比較好的 12/18 13:14