2017-10-19 85 views
0

我很感興趣,這些形式的for循環測試表達式中的哪一種更合適(從性能和良好的代碼實踐來看):`for`循環 - 性能測試表達式中的數學運算,優化

for(i = 0; i < size - 1; i++) { 
    do something 
} 

int decreased_size = size - 1; 
for(i = 0; i < decreased_size; i++) { 
    do something 
} 

是在第一實施例計算每一次測試表達式size - 1或不編譯器優化它到恆定值,所以沒有必要創建一個額外的變量decreased_size

我一直在創造一個額外的變量,但現在,看着Codeforces上的其他解決方案,我懷疑 - 是否有意義?

編譯:GCC 5.4.0版本20160609

+0

取決於編譯器是否可以100%確定地確定「大小」在循環內不能更改。但通常這個額外的變量是浪費打字。 – Mat

+4

構建優化的可執行文件。檢查生成的機器代碼。這是瞭解編譯器將做什麼的唯一方法。 –

+2

第三選擇:'for(i = 0; i + 1 chux

回答

2

沒有人讓比其他更有意義。事實上,與優化,它會產生相同的代碼:https://godbolt.org/g/vzVJVF

其次,size-1是,在大多數情況下,可以忽略不計的在循環動作所消耗的時間面對面的人消耗的時間,因此優化這部分有一個非常小的影響在系統上。

總之,只有在需要時才進行優化(所以您會發現存在時間/內存問題)。在每一天,更喜歡一個可讀,易於理解的代碼。

+0

在第二個for(int i = 0; i MiniMax

+1

更正後的版本:https://godbolt.org/g/vzVJVF – MiniMax

+0

@MiniMax非常感謝 – Garf365