[FIXED] Gibt es einen Leistungsunterschied zwischen i++ und ++i in C?

Ausgabe

Gibt es einen Leistungsunterschied zwischen i++und ++i, wenn der resultierende Wert nicht verwendet wird?

Lösung

Zusammenfassung: Nein.

i++möglicherweise langsamer als ++i, da der alte Wert von i
möglicherweise für die spätere Verwendung gespeichert werden muss, aber in der Praxis werden alle modernen Compiler dies wegoptimieren.

Wir können dies demonstrieren, indem wir uns den Code für diese Funktion sowohl mit als auch mit ++iansehen i++.

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

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

}

Die Dateien sind die gleichen, außer für ++iund i++:

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

Wir kompilieren sie und erhalten auch den generierten Assembler:

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

Und wir können sehen, dass sowohl das generierte Objekt als auch die Assembler-Dateien identisch sind.

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

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


Beantwortet von –
Mark Harrison


Antwort geprüft von –
Candace Johnson (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like