2012-09-17 26 views
0

只要聲明變量,就開始操作它。我的問題是操縱的速度,如果它甚至很重要。
比方說你有一個變量total,它是數組中所有值的總和。你想找到平均值,所以你會做total/length。你是否更快地宣佈一個新的值(即double avg = total/length),還是更快地做一切「到位」(total \= length),這當然會忽略這樣一個事實,即total是一個很差的變量名稱,但這個只是爲了得到我的觀點就位數據處理

我懷疑由於處理器需要從RAM複製數據在ALU中進行計算,甚至通過位移在CPU中進行硬連線計算,但我不確定C++如何處理記憶,我很好奇它是如何在後端工作的。

回答

2

這取決於你平均使用的頻率。如果它只用了幾次,那麼它可以忽略不計,但如果你需要使用平均數百或數千次,那麼它可能會「更快」地使用一個變量,因爲你不必進行所有的計算時間。然而,今天的編譯器在優化方面非常出色,所以實際上它可能不會有問題。

唯一知道的就是測試它,做一些分析和測量。一些你應該總是之前做的手動優化之前做的事情(我懷疑計算平均數,甚至更復雜的東西,將成爲一個瓶頸。)

1

這取決於您的編譯器在打開優化後的功能。

2

假設你的意思total /= length,你只能看到一個區別在哪裏它的事項(即當你真正需要同時使用totalavg,在這種情況下,你無論如何也使用第二版)。

我反對使用total /= length,因爲total變成平均值,它在語義上不再正確。