2011-09-08 91 views
5

我記得多年前,聽說循環遞減而不是遞增更有效,特別是在編程微處理器時。 這是真的嗎?如果是這樣,原因是什麼?更好地減少循環?

+0

也許它取決於將'ECX'遞減爲零的彙編程序指令'LOOP'。但在高級語言中,這不應該產生太大的影響。 – Nobody

+0

C#標籤令人困惑:您的問題取決於CPU架構,但C#被編譯爲IL代碼,可根據指令集將其翻譯爲不同的機器代碼指令 –

+0

如果您的實際代碼比其他代碼快,張貼它並問爲什麼。否則,這不是一個非常有用的問題。 – Gabe

回答

10

從蝙蝠身上發生的一件事是遞減循環的結束條件可能會更快。如果循環到certian值,則每次迭代都需要與該值進行比較。但是,如果循環爲零,那麼大多數處理器上的遞減會自動設置零標誌,如果減量值爲零,則不需要額外的比較操作。

我認識的小土豆,但是在一個緊密的內部循環中,它可能很重要。

+0

這確實是答案 –

+0

如果你可以張貼一些時間分析顯示這種效果,這個問題可能值得重新打開。 – Gabe

+2

@加貝 - 一個奇怪的請求。一般來說,我實際上贊同你對這種微型優化的懷疑。我絕對不會混淆我的HLL代碼來做到這一點,除非我有數字顯示它幫助了很多。但是,(在像M68K或Ix86這樣的處理器上)這需要額外的指令這一事實是毋庸置疑的。我不認爲我真的有足夠的空閒時間來確定地向您證明,執行任何指令都比執行指令更快。 –

2

在c#中,效率沒有任何區別。減少循環的唯一原因是如果循環訪問集合並隨時刪除項目。

0

不知道遞減,但我知道使用++我而不是i ++更具有高性能。

網上有很多文章爲什麼會這樣,但歸結到這一點:使用++我讓它自動地被聲明爲第一次,並且使用i ++不會那樣做。 (在C#至少)

同樣,不知道遞減時更好的性能,只是想我會扔東西在那裏看到你是如何詢問性能:)

你只使用遞減,因爲在我所知道的某些情況下它更容易。

+1

肯定這不是真的 –