Re: Wie wird OOP Compiler intern realisiert?
19. Mär 2004, 21:25
Also bei Delphi hinke ich mit den Internas noch arg hinterher, aber viele C-Compiler, allen vorran der GCC, benutzen für Klassen tatsächlich recordartige Strukturen. Eine Methode ist da ein Pointer auf eine Funktion.
Dabei werden immer die ältesten Subsets der Klasse nach vorne gepackt, wenn du also eine Klasse von irgendwo ableitest, werden Felder und Methoden nicht sortiert (Felder zuerst, dann erst die Methoden) oder sowas (Methoden zuerst, dann erst die Felder), sondern nur hinten drangehangen. Dadurch ist es dann möglich, einen Typecast in einen Ancestor-Typ zu machen, ohne daß der Compiler für sämtliche Eventualitäten die Strukturen neu schreiben darf.
Erzeugt werden die Klassen dann intern auch mit malloc (bzw was sich sonst so grad' in der C-Library findet), anschließend werden die Pointer auf die Methoden (ebenfalls nur einmal im Speicher) eingerenkt und fertig.
Da ich dieses Prinzip für sehr sinnvoll und effizient halte, vermute ich, daß Borland ähnlich vorgeht und ebenfalls recordähnliche Strukturen für Klassen verwendet.
Der Aufruf von Methoden eines Objektes sieht dann so aus, das man sich den Zeiger schnappt, dereferenziert, die Referenz auf das Objekt als Parameter (user-transparent) übergibt und hinspringt.
|