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 ++i
ansehen 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 ++i
und 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)