Sie haben das gleiche Problem wie ich, wenn ich versuche zu lernen, was ein Compiler tut - Sie erstellen ein triviales Programm, um das Problem zu demonstrieren, und untersuchen die Assembly-Ausgabe des Compilers, um festzustellen, dass der Compiler alles optimiert hat Sie haben versucht, es zu beseitigen. Sie können sogar eine ziemlich komplexe Operation in main () finden, die auf im Wesentlichen reduziert ist:
push "%i"
push 42
call printf
ret
Ihre ursprüngliche Frage lautet nicht "Was passiert mit int i = 5; int j = 10...
?" aber "Verursachen temporäre Variablen im Allgemeinen eine Laufzeitstrafe?"
Die Antwort ist wahrscheinlich nicht. Sie müssen sich jedoch die Assembly-Ausgabe für Ihren speziellen, nicht trivialen Code ansehen. Wenn Ihre CPU viele Register hat, wie z. B. ein ARM, befinden sich i und j sehr wahrscheinlich in Registern, genauso wie wenn diese Register den Rückgabewert einer Funktion direkt speichern würden. Zum Beispiel:
int i = func1();
int j = func2();
int result = i + j;
ist mit ziemlicher Sicherheit genau der gleiche Maschinencode wie:
int result = func1() + func2();
Ich schlage vor, dass Sie temporäre Variablen verwenden, wenn sie das Verstehen und Verwalten des Codes erleichtern, und wenn Sie wirklich versuchen, eine Schleife zu straffen, werden Sie trotzdem die Assembly-Ausgabe untersuchen, um herauszufinden, wie Sie so viel Leistung wie möglich verfeinern können möglich. Aber opfern Sie nicht die Lesbarkeit und Wartbarkeit für ein paar Nanosekunden, wenn dies nicht notwendig ist.
int result = 15 ;