Speicherzuordnung für Elementfunktionen in C ++

8
%Vor%

sizeof Klasse A und Klasse B sind beide nur 1 Byte. Was ist mit der Speicherzuordnung für die Memberfunktion disp in B.

    
Jagan 08.10.2010, 06:03
quelle

4 Antworten

18

Für jede Instanz der Klasse wird Speicher nur seinen Member Variablen zugewiesen, d. h. jede Instanz der Klasse erhält keine eigene Kopie der Memberfunktion. Alle Instanzen teilen den gleichen Mitgliedsfunktionscode. Sie können sich das als Compiler vorstellen, der für jede Elementfunktion einen versteckten this -Zeiger übergibt, damit er auf dem richtigen Objekt operiert. In Ihrem Fall, da der C ++ - Standard explizit Objekte der Größe 0 verbietet, haben Klasse A und Klasse B die minimal mögliche Größe 1. Im Falle der Klasse C, da es eine virtuelle Funktion gibt, hat jede Instanz der Klasse C einen Zeiger auf ihren v -Tabelle (dies ist jedoch Compiler-spezifisch). Also wird die Größe dieser Klasse sizeof (Zeiger) sein.

    
Naveen 08.10.2010, 06:10
quelle
1

Nicht-virtuelle Elementfunktionen müssen nicht "zugewiesen" werden; Sie können im Wesentlichen als normale Nicht-Klassenfunktionen mit einem impliziten ersten Parameter der Klasseninstanz behandelt werden. Sie fügen der Klassengröße normalerweise nicht hinzu.

    
Nick 08.10.2010 06:09
quelle
1

Die Größe einer Klasse hängt von der Größe der Variablen in der Klasse und nicht von den Funktionen ab. Funktionen werden beim Aufruf nur auf dem Stack zugewiesen und bei der Rückgabe ausgelassen. Die Größe einer Klasse entspricht also in der Regel der Summe der Größen von nicht statischen Membervariablen ...

    
Laz 08.10.2010 06:13
quelle
0

Nicht-virtuelle Funktionen sind nicht Teil des Klassenspeichers. Der Code für die Funktion wird in die ausführbare Datei eingebettet (ähnlich wie bei einem statischen Member), und der Speicher wird beim Aufruf der Variablen zugewiesen. Das Objekt enthält nur die Datenelemente.

    
JoshD 08.10.2010 06:09
quelle

Tags und Links