Discussion:
Objekt-Instanziierung im Assembler
(zu alt für eine Antwort)
kauhl-meersburg
2006-09-17 18:29:04 UTC
Permalink
hallo alle,
könnte mir jemand bitte einen Beispiel-Assembler-Code für eine
kompilierte C++-Objekt-Instanziierung (Konstruktor / Destruktor)
erstellen, zu Lernzwecken, d. h. wie hierbei die Unterprogramm-Technik
eingesetzt wird

vielen Dank im voraus
kauhl
Stefan Reuther
2006-09-17 19:50:30 UTC
Permalink
Post by kauhl-meersburg
könnte mir jemand bitte einen Beispiel-Assembler-Code für eine
kompilierte C++-Objekt-Instanziierung (Konstruktor / Destruktor)
erstellen, zu Lernzwecken, d. h. wie hierbei die Unterprogramm-Technik
eingesetzt wird
Dein C++-Compiler kann das sicherlich (Borland- und GNU-Compiler mit der
Option "-S").

Ja, das ist ernstgemeint. Denn die Details, wie das genau zu
funktionieren hat, hängen vom Compiler und dessen Runtime-Library ab,
und die kennt nur dieser.


Stefan
Sebastian Biallas
2006-09-17 21:21:02 UTC
Permalink
Post by kauhl-meersburg
hallo alle,
könnte mir jemand bitte einen Beispiel-Assembler-Code für eine
kompilierte C++-Objekt-Instanziierung (Konstruktor / Destruktor)
erstellen, zu Lernzwecken, d. h. wie hierbei die Unterprogramm-Technik
eingesetzt wird
So allgemein lässt sich das nicht beantworten, das kann jeder Compiler
so implementieren, wie es ihm passt. Ein nicht unwesentlicher Teil von
C++ besteht übrigens darin, dass das Compiler "kleine" Konstruktoren und
Destruktoren inlined, sie im Assembly gar nicht mehr explizit auftauchen.

Dazu kommt noch, dass es in C++ zwei verschiedene Arten der
Instanziierung gibt, nämlich die automatische auf dem Stack und die
explizierte per 'new' auf dem Heap. Der gcc generiert dafür
unterschiedliche Konstruktoren und Destruktoren.

Zur "Unterprogramm-Technik" lässt sich eigentlich nur sagen, dass ein
Konstruktor eine ganz normale Funktion ist, und ein Destruktor meist ein
ganz normale virtuelle Methode. Wenn ein Objekt per "delete" zerstört
wird, wird der Destruktor indirekt über die VMT aufgerufen, wenn es auf
dem Stack lag (und der Compiler somit den genauen Typ kennt), wird der
Destruktor direkt angesprungen. Es sei denn, der Compiler kann ihn
inlinen, dann fehlt der Destruktoraufruf u.U. komplett.
--
Gruß,
Sebastian
kauhl-meersburg
2006-09-18 19:18:23 UTC
Permalink
hallo S & S,
vielen Dank für die schnelle Hilfe und die konkreten Tipps, muß nun doch
wohl durch das "Tal der Tränen", d. h. Compilate anschauen, um das
OOP-Paradigma von C/C++ zu verinnerlichen - ein alter "C"-Hase hat mir
nämlich prophezeit, daß ich (Alt-68er / 6800 + 8086) in meinem
dieseitigen Leben C/C++ nicht mehr kapieren werde - das schmerzt,
deswegen auch der Umweg über den Assembler -
bin aber gut ausgerüstet: Borland C++BuilderX, MS Visual C++ 6.0 und gcc
vorhanden und die Registerschieberei über den Stack auch schon kapiert
weitere Fragen nicht ausgeschlossen, da ist ja auch noch die
"Zeiger"-Logik (mit * und &)
gruß kauhl

Loading...