1. ホーム
  2. c

[解決済み] C言語のi++と++iに性能差はあるのでしょうか?

2022-03-18 01:34:52

質問

との間に性能差はあるのでしょうか? i++++i の場合、結果の値は使用されないのですか?

どのように解決するのですか?

要旨:いいえ。

i++ よりも遅くなる可能性があります。 ++i の古い値であるため i は後で使うために保存しておく必要があるかもしれませんが、実際には最近のすべての コンパイラはこの点を最適化します。

この関数のコードを見て、これを実証することができます。 との両方が ++ii++ .

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

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

}

を除いて、ファイルは同じです。 ++ii++ :

$ 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