這個問題是類似於已經被問earlier但我認爲內存分頁不考慮。所以,我在這裏再次提出類似的問題:在C++函數,指針VS索引數組
// version 1
int nums[100];
int* pNum = nums;
for(int i=0;i<100;i++,pNum++){
foo(pNum);
}
// version 2
for(int i=0;i<100;i++){
foo(nums[i]);
}
哪個版本會更快?以前,據說生成的彙編代碼會非常相似,因爲兩個版本都需要增加內存地址的位置,但是考慮到一個非常大的數組,內存分頁性能是否會發生顯着變化?由於其中一個需要長時間移位,但另一個需要從陣列的基本內存地址移位?我知道這是非常依賴平臺/編譯器,但仍然想知道人們的常見做法,特別是處理像圖像處理或科學計算這樣的大數據類型?謝謝。
嘗試定時既看到自己。但我警告說,現代編譯器非常有能力將一種形式轉換爲另一種形式。因此可能很難進行基準測試。 – Mysticial 2012-07-12 01:17:11
你不應該擔心這樣的小細節。無論您如何編寫,編譯器都足夠聰明,可以優化這一點。而且,像這樣的微觀優化幾乎普遍浪費時間;通常會有更大的低效率來源。 – templatetypedef 2012-07-12 01:17:32
事實上,這是一個採訪問題,我已經說了一些類似於@templatetypedef的內容,但我認爲這對於芯片組製造商來說確實很重要。 – tartar 2012-07-12 01:21:36