Compileroptimierung für Lokalität der Variablendefinition
-
Du kannst sogar davon ausgehen, dass die Initialisierung komplett wegfällt, da der Initialwert nirgends benutzt wird.
-
Badestrand schrieb:
Die meisten Compiler sind so gut, dass du dir erst keine Gedanken darüber zu machen brauchst

Das ist wahr. Ich hab das Beispiel nachgebaut und mit dem VC++ übersetzt (Release): Die Funktion wurde in Inline-Code verwandelt, b wurde komplett heraus-optimiert und für a ist ein Register verwendet worden.
-
~*kleinlaut*: Wie macht man sowas eigentlich? :)~
-
@ Badestrand: was?
-
Checker&Murckser schrieb:
@ Badestrand: was?
Wie du das hier herausgefunden hast:
"Die Funktion wurde in Inline-Code verwandelt, b wurde komplett heraus-optimiert und für a ist ein Register verwendet worden."
Oder einfach mit irgendeinem Disassembler ge-disassemble-t?
-
Badestrand schrieb:
Checker&Murckser schrieb:
@ Badestrand: was?
Wie du das hier herausgefunden hast:
"Die Funktion wurde in Inline-Code verwandelt, b wurde komplett heraus-optimiert und für a ist ein Register verwendet worden."
Oder einfach mit irgendeinem Disassembler ge-disassemble-t?ich hab das nicht rausgefunden^^ - würde mich aber auch interessieren -
-
Der g++ und auch Visual Studio bieten eine Option mit der sich ein Assembler-Listing ausgeben lässt. In Visual Studio 2005, geht das über folgende Einstellung in den Projekteingenschaften:
Konfigurationseigenschaften->C/C++->Ausgabedateien->AssemblyausgabeGreetz
-
Oh man, krasse Sache! Danke!

-
*mich Badestrand anschließ*

-
Du kannst auch einen Breakpoint setzen, und per Alt-8 das Assembly-Listing zur Laufzeit anzeigen lassen. Allerdings ist der Code im Release-Modus stark optimiert, mit anderen Worten: Bleibt das Programm beim Break nicht stehen, ist wahrscheinlich die Stelle mit deinem Breakpoint wegoptimiert worden.
^ funktioniert in VC++