Sind Membervariablen eines Objekts, das sich auf dem Heap befindet, auch automatisch auf dem Heap?

7
%Vor%

In diesem Fall befindet sich X, da "objectOnHeap" auf dem Heap ist, auch auf dem Heap, obwohl es nicht speziell neu erstellt wurde? Und in diesem Fall ist Y auf dem Stapel zugeordnet (und natürlich außerhalb des Geltungsbereichs), richtig?

Ich wundere mich, wenn ich meine Drähte gekreuzt habe, wenn ich versuche, mir vorzustellen, wie Objekte im Speicher gespeichert werden.

    
BuckFilledPlatypus 22.09.2009, 16:13
quelle

4 Antworten

17

Ja. Es ist auf dem Haufen. Grundsätzlich ist der einem Objekt auf dem Heap zugewiesene Speicherplatz groß genug, um alle seine Mitgliedsvariablen aufzunehmen.

    
Mehrdad Afshari 22.09.2009, 16:14
quelle
5

Ja, es ist auf dem Haufen.

Einige Details: Wenn Sie den Operator "new" verwenden, teilt der Compiler dem Heap genügend Speicherplatz für die Klasse zu, einschließlich des gesamten für alle Membervariablen benötigten Speicherplatzes (der auch Klassen sein kann. In diesem Fall muss die Größe der Klasse sein.) berechnet, usw.).

Danach wird der Konstruktor für die Datenmemberklassen und dann für die Klasse selbst aufgerufen.

Wenn Sie nicht explizit Speicher auf dem Heap zuweisen (normalerweise mit dem neuen Operator oder einer Funktion, die dies für Sie tut), wird der Speicher wie die Variable y in Ihrem Beispiel auf dem Stack zugewiesen / p>     

Edan Maor 22.09.2009 16:21
quelle
3

Ich schätze, die Hälfte Ihrer Frage ist unbeantwortet geblieben: Sie haben gefragt, ob Y noch auf dem Stapel ist, das ist in der Tat richtig.

    
zenerino 22.09.2009 17:05
quelle
0

Y ist auf Stack, da lokal erstellt wird; X ist auf dem Haufen.

    
Wangge 28.11.2011 03:18
quelle

Tags und Links