2009-09-22 14 views
7

In diesem Fall, da "objectOnHeap" auf dem Heap ist, ist X auch auf dem Heap, obwohl es nicht speziell neu? Und in diesem Fall wird Y auf dem Stapel zugeordnet (und natürlich außerhalb des Gültigkeitsbereichs), richtig?Sind Elementvariablen eines Objekts, das sich auf dem Heap befindet, auch automatisch auf dem Heap?

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

+1

'objectOnHeap' ist * nicht * auf dem Heap. Es befindet sich auf dem Stapel oder im Datensegment. Sein Wert ist ein Zeiger, der auf etwas auf dem Haufen zeigt. –

+0

@Rob Kennedy, können Sie näher auf das Datensegment eingehen? Ich sehe jedoch, dass der Zeiger selbst auf dem Stapel liegt und die Daten, auf die er zeigt, auf dem Heap gespeichert sind. – BuckFilledPlatypus

Antwort

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.

5

Ja, es ist auf dem Haufen.

Einige Details: Wenn Sie den „neuen“ Operator verwenden, was passiert ist, dass der Compiler auf dem Heap für die Klasse ausreichend Platz zuweist, einschließlich der Raum alle für alle Variablen Mitglied benötigt (die auch sein könnte Klassen, in diesem Fall muss auch ihre Größe berechnet werden usw.).

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

Wenn Sie nicht ausdrücklich Speicher auf dem Heap zuweisen (in der Regel mithilfe des neuen Operators oder durch Aufrufen einer Funktion, die dies für Sie erledigt), wird der Speicher im Stapel wie die Variable y in Ihrem Beispiel zugeordnet.

3

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

0

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

Verwandte Themen