2012-08-11 109 views
-3

考慮下面的代碼片段:哪個更快:i = i + 2或i + = 2?

for(i=0;i<10;i+=2) // 1 
for(i=0;i<2;i=i+2) // 2 

哪一個會更好用?
它在性能上有什麼不同嗎?

+1

你試過計時嗎?你發現了什麼? – Levon 2012-08-11 15:33:58

+11

第二個會更快,因爲綁定是不同的。 – 2012-08-11 15:34:44

+0

@JensGustedt你能否更詳細地解釋一下?你的意思是2對10? – Gir 2012-08-11 15:35:26

回答

3

你的問題沒有確定的答案。這取決於您的編譯器在其他方面(優化級別,......)和目標平臺上的智能程度。這不是C語言問題。這種語言本身並不多或少表現。它只取決於編譯器從中建立什麼。因此,如果性能事關重大,請對其進行測試......

否則,我的建議是,以您感覺它更具可讀性的方式編寫它。

2

第一個選項至少與第二個選項一樣快。 儘管任何編譯優化都會生成相同的彙編代碼。

6

下了0.0260015秒

for (i = 0 ; i < 10000000 ; i += 2) 

這把0.0170010

for (i = 0 ; i < 10000000 ; i = i + 2) 

@MasterID雖然是正確的,當我啓用 '優化代碼' 都報道0.0150009秒

+0

您需要多次運行它。差異可能是由於其他東西在後臺運行,操作系統中斷 – Gir 2012-08-11 15:45:09

+2

我不懷疑你的時間,但我很確定他們沒有表明後面的代碼實際上是較慢的。在我手邊只有兩個編譯器(gcc和clang)下,兩者都產生完全相同的彙編代碼。你幾乎可以肯定地測量噪音。 – DSM 2012-08-11 15:45:21

+1

哇,+1,最後somone真的測試過它:D – Bugari 2012-08-11 15:47:03

2

兩種表達完全相同的語義,即在C語言的抽象機器中完全相同的效果。如果一個比另一個慢,這是編譯器中的一個質量缺陷。

相關問題