C では、プレフィックスのインクリメントはポストフィックスのインクリメントよりも速いと言われていると聞きましたが、これは本当で、その理由は何ですか?
++x 対 x++
C では、プレフィックスのインクリメントはポストフィックスのインクリメントよりも速いと言われていると聞きましたが、これは本当で、その理由は何ですか?
++x 対 x++
これは何度も繰り返されるばかげた神話です。2 つの演算子には意味的な違いがあります。1 つは結果として古い値を持ち、もう 1 つは結果として新しい値を持ちます。この結果を使用すると、使用した演算子に応じてコードの動作が異なります。これには、一方の動作が他方よりも効率的に達成できる場合のパフォーマンスの違いが含まれる場合があります。しかし、結果を使用しない場合、x=x+1
、x+=1
、x++
、および++x
はすべて同一です。
短い答えいいえ。理由は、ステートメントの評価の順序が変更されただけで、同じ操作だからです。
例:
int a = x++;
int b = ++x;
疑似アセンブリ:
mov a, x
inc x
inc x
mov b, x
mov
これは些細な例ですが、より大きな例でも起こりうる最悪の事態は、依存関係または強制バリアのために余分な操作を追加するだけのポストインクリメント値をプッシュまたはプルすることを許可しないメモリバリア強制操作です。. ほとんどのコンパイラmov
は、命令の並べ替えを使用して、標準的な状況でこの余分なものを最適化します。