以下代碼片段的性能有任何不同嗎?哪一個表現最好,爲什麼?C++ int比較效率
int i = 1000000000;
while(i != 0) { i--; }
或
int i = 1000000000;
while(i) { i--; }
或
int i = 1000000000;
while(i > 0) { i--; }
我看到很多人使用的第一個例子,不知道爲什麼。更容易閱讀?
以下代碼片段的性能有任何不同嗎?哪一個表現最好,爲什麼?C++ int比較效率
int i = 1000000000;
while(i != 0) { i--; }
或
int i = 1000000000;
while(i) { i--; }
或
int i = 1000000000;
while(i > 0) { i--; }
我看到很多人使用的第一個例子,不知道爲什麼。更容易閱讀?
以下代碼片段的性能有任何不同嗎?
號
前兩個是等效的,並且所有三個可以被優化以完全相同裝配。
我看到很多人使用第一個例子,並想知道爲什麼。更容易閱讀?
它要求讀者比第二個知道更少的語言規則。特別是,第二個程序需要知道條件表達式轉換爲bool
,並且從int
的轉換具有與不等於零相同的結果。
請注意,如果將i
替換爲浮點數,或者將減量修改爲具有更多複雜性(例如:減少2),則第三個選項最容易證明是正確的。整數和單一遞減沒有區別。
在這種情況下,它們都是一樣的,任何體面的編譯器都會爲這三個產生相同的代碼。 在任何情況下,試圖手動優化這樣的小事情(整數比較)是毫無意義的。你的編譯器會發現它,並在代碼生成中做得比以前做得好得多。因此,只要停止嘗試,而不是隻寫可讀的代碼,然後信任編譯器 - 在任何情況下,這些都不會造成任何性能差異。
爲什麼人們拒絕投票而不是給出正常答案或只是望向別處?這是我認爲的一個正常問題,他應該在哪裏提出這個問題? – retinotop
前兩個是等價的;將int轉換爲bool與檢查它不是零相同。與其他字面問題一樣:1)循環內的工作肯定會佔據你的時間,所以誰在乎? 2)知道你是否應該關心,分析它,以及3)如果你真的知道的話,看編譯的代碼。 – GManNickG
@retinotop我沒有投票,但OP沒有顯示他們自己的研究,如程序集輸出或基準測試結果。沒有努力的問題在這個網站上經常被看不起。這就是說,我瞧不起那些沒有建設性批評的票。 – user2079303