Sie leiden das gleiche Problem, das ich tue, wenn ich versuche herauszufinden, was ein Compiler tut - Sie machen ein triviales Programm, um das Problem zu demonstrieren, und untersuchen die Assembly-Ausgabe des Compilers, nur um zu erkennen, dass Der Compiler hat alles optimiert, was Sie versucht haben, um es zu beseitigen. Sie können zu wesentlich reduziert auch eine ziemlich komplexe Operation in main() finden:
push "%i"
push 42
call printf
ret
Ihre ursprüngliche Frage ist nicht „was mit int i = 5; int j = 10...
passiert?“ aber "verursachen temporäre Variablen im Allgemeinen eine Laufzeitstrafe?"
Die Antwort ist wahrscheinlich nicht. Aber Sie müssen sich die Assembly-Ausgabe für Ihren speziellen, nicht-trivialen Code ansehen. Wenn Ihre CPU viele Register hat, wie zum Beispiel ein ARM, dann sind i und j sehr wahrscheinlich in Registern, genau so, als würden diese Register den Rückgabewert einer Funktion direkt speichern. Zum Beispiel:
int i = func1();
int j = func2();
int result = i + j;
ist mit ziemlicher Sicherheit genau der gleiche Maschinencode zu sein, wie:
int result = func1() + func2();
Ich schlage vor, Sie temporäre Variablen verwenden, wenn sie den Code leichter zu verstehen und zu pflegen, und wenn Sie machen‘ Wenn Sie wirklich versuchen, eine Schleife zu straffen, werden Sie ohnehin in den Baugruppenausgang schauen, um herauszufinden, wie Sie so viel Leistung wie möglich finalisieren können. Aber opfern Sie die Lesbarkeit und Wartbarkeit für einige Nanosekunden nicht, wenn dies nicht notwendig ist.
Durch die Optimierung des Compilers wird dieser Code wirksam geändert: 'int result = 15;' – 2501
Compiler wird Ihren Code optimieren. Es ist produktiver, sich auf Dinge wie (teilweise) eine Berechnung zu konzentrieren, die innerhalb einer Schleife wiederholt wird, die besser gemacht werden würde, bevor die Schleife beginnt. –
Ich denke, dass er irgendwelche temporäre Variablen bedeutet, d. H. Mit a = b + c; d = a + e; langsamer als mit a = b + c + d + e; Es kann möglicherweise mehr Speicher verwenden, wenn es auf eine Weise ausgeführt wird, die der Compiler nicht optimieren kann, aber es sollte nicht langsamer sein. Beste Fokussierung oder Arbeitsproduktivität, es sei denn, es handelt sich um einen kommerziellen und kritischen Leistungscode. –