2014-02-09 17 views
2

我有一個2d數組。我需要儘可能快地執行一些操作(函數將被稱爲每秒十幾次,所以它會很高效)。執行直接指針操作還是更好?或者[

現在,讓我們說,我想元素A[i][j],有沒有簡單地使用A[i][j]*(A+(i*width+j))(忽略了一個事實,我需要計算我*寬+ J,讓我們說我已經有這個值)之間的任何速度差?

+1

爲什麼你不測試和發現? – chris

+1

@chris,因爲我測試過的最後兩次我被設置正確的編譯器標誌的人知識較好,但仍被證明是錯誤的 – Xyzk

+1

答案是肯定的。使用任何可以讓程序更清晰的意圖。 – keshlam

回答

5

隨着所有優化開啓,不應該有任何區別 - 不僅在時間上,而且在編譯器爲這兩個構造生成的代碼中也不會有區別。

與程序員的觀點最大的區別在於可讀性。第一個構造立即告訴讀者他正在處理一個二維數組,而第二個構造需要一些思考(這是一個行主命令還是一個列主命令?width在哪裏計算?選擇的理由是什麼這種方式通過更明顯的二維數組語法?)。這就是爲什麼第一個構造在實際情景中更可取的原因。

+0

作爲一名程序員,我真的對程序如何訪問內存有任何控制嗎?或者,我的代碼僅僅是一個建議? – Xyzk

+2

@Xyzk除了無法區分差異的情況(即程序邏輯沒有改變時),您的代碼幾乎可以完全控制訪問內存中的數據。 – dasblinkenlight

1

根據編譯器的質量,我認爲[]符號可以導致更快的代碼。原因是當你使用指針時,編譯器不能確定指針別名沒有發生,這可能會阻止某些優化。

OTOH,如果使用[]符號,那麼這些問題不適用,編譯器在應用優化時可能會變得更積極。

相關問題