C の i++ と ++i にはパフォーマンスの違いがありますか? 質問する

C の i++ と ++i にはパフォーマンスの違いがありますか? 質問する

結果の値を使用しない場合、i++との間にパフォーマンスの違いはありますか?++i

ベストアンサー1

要約: いいえ。

i++++iは、 の古い値を後で使用するために保存する必要がある場合があるため、よりも遅くなる可能性がありますiが、実際には、すべての最新のコンパイラはこれを最適化して削除します。

この関数のコードを見て、++iとの両方を確認することでこれを実証できますi++

$ cat i++.c
extern void g(int i);
void f()
{
    int i;

    for (i = 0; i < 100; i++)
        g(i);

}

++iおよびを除いて、ファイルは同一ですi++

$ diff i++.c ++i.c
6c6
<     for (i = 0; i < 100; i++)
---
>     for (i = 0; i < 100; ++i)

これらをコンパイルし、生成されたアセンブラも取得します。

$ gcc -c i++.c ++i.c
$ gcc -S i++.c ++i.c

生成されたオブジェクト ファイルとアセンブラ ファイルは同じであることがわかります。

$ md5 i++.s ++i.s
MD5 (i++.s) = 90f620dda862cd0205cd5db1f2c8c06e
MD5 (++i.s) = 90f620dda862cd0205cd5db1f2c8c06e

$ md5 *.o
MD5 (++i.o) = dd3ef1408d3a9e4287facccec53f7d22
MD5 (i++.o) = dd3ef1408d3a9e4287facccec53f7d22

おすすめ記事