Ist x += 1 effizienter als x = x + 1?
In x = x + 1
ist x
zweimal beurteilt? Wenn dem so ist, bedeutet das, dass in x += 1
, x
wird nur einmal ausgewertet? Wie sind die beiden Ausdrücke werden ausgewertet in Bezug auf compiler Zwischencode?
Beispielsweise x++
könnte bedeuten : die Position x
laden Sie den Inhalt x
in ein register und erhöhe den Wert von x
im Speicher.
Außerdem habe ich gelesen, dass x += 1
ist nützlich, wenn x
ist nicht eine einfache variable, sondern ein Ausdruck mit einem array. Irgendwelche Ideen, warum dies der Fall ist?
- Das klingt wie eine Menge von unbegründeten Annahmen, insbesondere der Titel. Ich sehe keinen Grund, warum sollte man effizienter sein als die anderen und ich bin mir relativ sicher, dass es nicht der Fall ist, die auf die meisten C-Compiler.
- Ein compiler das Geld Wert, das Sie dafür bezahlt wird, kompilieren Sie beide Ausdrücke auf das gleiche Objekt-code. Wenn Sie besorgt über die Leistung: Messen, Messen, unterschiedliche Codes, unterschiedliche Zusammenstellung flags, die unterschiedliche Ressourcen-Nutzung, verschiedene alles.
- Wissen Sie, dass x += 1 ist effizienter als x = x + 1? Haben Sie schaute auf die generierte Objekt-code?
- Vielleicht war dies gegebenenfalls auch ältere Compiler..ich bin neugierig, warum man könnte effizienter sein, als die anderen in einem älteren compiler...ich Las darüber in einem Buch mit dem Titel "Deep C Secrets".
- Wie über die Suche nach einigen Büchern, die nicht 17 Jahre alt?
- Es ist denkbar, einen Unterschied in C++ (wenn
x
ist ein UDT), aber es sollte kein Unterschied in C. - Ok..also, wenn x ist ein vom Benutzer definierter Typ, wie würde x =+1 effizienter sein?
- Fragen über UDTs ist eine andere Frage. Diese Frage ist etwa C.
- Es ist nicht nur ein Duplikat ist; diese Frage hat eine falsche Annahme in der Betreff-Zeile.
- Ja, das war mein Punkt...
Du musst angemeldet sein, um einen Kommentar abzugeben.
In den meisten Compiler diese wäre identisch
Nur, um Ihnen eine "real-world" - Beispiel, betrachten Sie dieses Programm:
Kompilieren mit GCC in Darwin 11 mit den folgenden flags:
-S
halt in assembler-m32
zu 32-bit-Plattform, nur um die Dinge zu vereinfachen ein wenigGeneriert das folgende Programm, außer für die Kommentare und Leerzeilen, die ich Hinzugefügt. Schauen Sie speziell in die Kommentare.
Ist es nicht.
Ist es nicht.
Den Grund für den Vorzug
x += 1
zux = x+1
kommt zustande, wennx
ersetzt mit einem viel längeren identifier, oder vielleicht ein Feld in einer Klasse oder Struktur. In dieser situation, diex += 1
version ist leichter lesbar und-noch wichtiger-vermeidet die Fallstricke wiederholen.Also es gibt schon einige Fragen, die cover, was Sie Fragen ist hier:
x=x+1 gegen x +=1
Der Inkrementierung: x++ vs x += 1
Welche ist schneller? ++, += oder x + 1?
Die Quintessenz ist, dass in den meisten aber nicht alle Sprachen der compiler wird Sie sowieso identisch, es gibt also keinen Unterschied in der Effizienz. Die obigen Fragen gehen in eine gerechte bisschen näher auf das Thema ein.
Mit gcc, können Sie den assembler-code mit
gcc -S foo.c
. Ich versuchte es mitx += 1
undx = x + 1
und es war das gleiche.Da dauert es 4 Zeichen zu schreiben, anstatt 5.
Dies ist der einzige Weg in die
x+=1
ist "effizienter" alsx=x+1
. Aber die+=
Betreiber hat ein paar andere Vorteile, wie die Tatsache, dass(x)+=1
arbeitet in Makros, wox
ist ein Ausdruck, die Nebenwirkungen haben können, die Sie wollen vermeiden, dass die Bewertung mehr als einmal...