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
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
)?
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%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.
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).