grundsätzlich:
1. Der Klassentyp von C++ ist ein Werttyp, was bedeutet, dass beim Instanziieren eines Klassenobjekts Speicher auf dem Stapel zugewiesen wird.
Auf diese Weise, wenn der Klassentyp so definiert ist
Klasse A
{
öffentlich:
int i;
A a;
}
Es gerät in eine Endlosschleife, da A beim Instanziieren eines Objekts von A den von einem solchen Objekt belegten Speicherplatz basierend auf dem Elementtyp berechnen muss (die Datenelemente werden basierend auf dem Typ und dem Code des Elements bestimmt). Die Funktion wird in der exe gespeichert. Um sie dem Speicher zuzuordnen, verwenden Sie einfach einen Zeiger, um auf die Speicheradresse zu zeigen, und fügen Sie einige Klassenbeschreibungsinformationen hinzu. Wenn Sie auf ein Objekt stoßen, zeigt sizeof jedoch nicht die Speichernutzung dieses Teils der Beschreibungsinformationen an a ist ein eigener Typ und berechnet den von a verwendeten Speicherplatz. A ist vom Typ A, also wiederholen Sie den Vorgang.
Also in C++
Kann Zeiger seines eigenen Typs enthalten (wird häufig in verknüpften Listen verwendet)
Klasse A
{
öffentlich:
int i;
A*pa;
}
Der von einer Zeigervariablen belegte Speicherplatz lässt sich leicht ermitteln. Die Anzahl der Maschinenwörter in der Länge gibt an, wie viel Platz die Zeigervariable einnimmt.
2. Der Klassentyp in C# ist ein Referenztyp, der im Wesentlichen ein Zeiger ist.
Daher sind alle Klassenobjekte in C# selbst 4 Byte groß (32-Bit-Maschine) und enthalten eine Speicheradresse, die auf den Heap-Speicherplatz verweist.
Klasse A
{
public int i;
öffentlich A a;
}
Ein Objekt = neues A();
Das Objekt selbst belegt 4 Bytes Speicher und speichert die Heap-Speicheradresse. Die Größe dieses Speichers beträgt 8 Bytes (int 4 Bytes, a ist ebenfalls vier Bytes), der Inhalt von a ist nicht null. speichert eine weitere Adresse im Heap-Speicher, die auf einen 8-Byte-Speicherplatz verweist.
Da wir bestimmen können, wie viel Speicherplatz ein Objekt von A belegt (4 Bytes, alle C#-Klassenobjekte belegen 4 Bytes in einer 32-Bit-Maschine), können wir definieren
-