Größe von Strukturen mit Funktionen in C ++

7

Ich weiß, wie sizeof für die Berechnung der Größe von Strukturen funktioniert, die nur Datenelemente enthalten. Aber zum Beispiel, wenn ich die folgende Struktur in C ++ habe

%Vor%

Wenn sizeof function verwendet wird, gibt es auch die Größe der Variablen zurück, die in der Funktion AddInt deklariert sind, oder berücksichtigt sie nur die Membervariablen ( c und d )?

    
chetan 22.08.2013, 12:39
quelle

3 Antworten

18

Es berücksichtigt nur Member-Variablen.

Darüber hinaus tragen nicht-virtuelle Elementfunktionen nicht zur Größe von struct bei, da sie keine Laufzeitunterstützung erfordern.

Um zu verstehen, warum es so ist, stellen Sie sich vor, dass dieser Code vom Compiler-Standpunkt diesem Pseudocode sehr ähnlich ist:

%Vor%     
Sergey K. 22.08.2013 12:39
quelle
2

Der Codeteil von Funktionen (einschließlich Variablen innerhalb dieser Funktionen) wird niemals als Teil der Größe eines Datenelements gezählt.

Wenn die Struktur virtuelle Funktionen hat, kann dies die Größe der Struktur erhöhen.

Dem Compiler steht es außerdem frei, Zwischenräume zwischen Datenelementen hinzuzufügen, um die korrekte Ausrichtung der Elemente in einer Datenstruktur zu unterstützen.

Mit anderen Worten, sizeof kann eine größere Größe als die einzelnen Elemente erzeugen. Alle Mitgliedsfunktionen werden jedoch nicht in dieser Größe berücksichtigt.

    
Mats Petersson 22.08.2013 12:46
quelle
2

sizeof berechnet die belegte Speichergröße für die Instanz dieses Typs. Für struct / class-Instanzen belegt die Funktion keinen zusätzlichen Speicher (im Textsegment gespeichert) für jede Instanz, während die Datenelemente jeder Instanz unterschiedlich sind und unabhängigen Speicher benötigen (im rw-Datensegment gespeichert).

    
JackyZhu 22.08.2013 12:52
quelle

Tags und Links