2011-09-08 3 views
5

私は、特にマイクロプロセッサをプログラミングするときに増分するのではなく、ループを減らす方が効率的であることを聞いて覚えています。 これは本当ですか、もしそうなら、理由は何ですか?減算ループを持つ方が良いですか?

+0

おそらく、 'ECX'を0に減らすアセンブラ指令' LOOP 'に依存するでしょう。しかし、高水準の言語では、これは大きな効果をもたらすべきではありません。 – Nobody

+0

C#タグは混乱しています。あなたの質問はCPUアーキテクチャに依存しますが、C#はILコードにコンパイルされており、命令セットに応じて異なるマシンコード命令に変換できます –

+0

実際のコードが他のそれを投稿して理由を尋ねる。それ以外の場合は、これは非常に有用な質問ではありません。 – Gabe

答えて

10

バットから発生する1つの事は、減少ループ上の終了条件がより速くなる傾向があることである。あなたがcertian値までループしているなら、その値との比較が各反復で必要となるでしょう。しかし、ゼロまでループしている場合、デクリメントされた値が0になるとほとんどのプロセッサのデクリメント自体がゼロフラグに設定されるため、余分な比較演算は必要ありません。

小さなジャガイモ私は気付いていますが、大きなタイトな内側のループでは大したことかもしれません。

+0

これは確かに答えです –

+0

この効果を示すタイミング解析を投稿できる場合、この質問は再開する価値があります。 – Gabe

+2

@Gabe - 奇妙なリクエスト。一般的に、私は実際にこのようなマイクロ最適化の疑いを拍手する。私はcertianly私がそれを示す数字が大いに役立つない限り、これを行うために私のHLLコードを難読化していません。しかし、(M68KやIx86のようなプロセッサ上で)これが余分な命令を必要とするという事実は間違いありません。私は、実際に命令を実行するよりも命令を実行するほうが速いことを決定的に証明するために必要な自由時間はないと思います。 –

2

c#では効率に違いはありません。デクリメントループを持つ唯一の理由は、コレクションをループして行くときに項目を削除する場合です。

0

デクリメントについてはわかりませんが、+++の代わりに++を使用するとパフォーマンスが向上します。

これはなぜWeb上にあるのですか?これはなぜですか?++を使用すると、私は最初に自動的に宣言され、i ++はそれをしません。 、再び

(少なくともC#で)デクリメントは、よりパフォーマンスであれば、私はあなたがパフォーマンスについて求めているか見てそこにそれを投げるだろうと思って:)

あなただけ使用したいかわかりませんいくつかの状況で私が知っているすべてのことが容易になるため、減る。

+1

確かにこれは真ではありません –

関連する問題