Heim > Backend-Entwicklung > C++ > Heap- vs. Stack-Zuordnung: Wo befinden sich Arrays und Werttypen im Speicher?

Heap- vs. Stack-Zuordnung: Wo befinden sich Arrays und Werttypen im Speicher?

Mary-Kate Olsen
Freigeben: 2025-01-02 17:53:44
Original
675 Leute haben es durchsucht

Heap vs. Stack Allocation: Where Do Arrays and Value Types Live in Memory?

Heap- und Stack-Zuordnung: Arrays und Werttypen aufschlüsseln

Im dargestellten Codeausschnitt:

int[] myIntegers;
myIntegers = new int[100];
Nach dem Login kopieren

Das Array myIntegers wird auf dem generiert Haufen. Entgegen der landläufigen Meinung sind die tatsächlich im Array gespeicherten ganzzahligen Werte nicht eingerahmt.

Klärung der Stack- und Heap-Zuordnung

Es besteht ein weit verbreitetes Missverständnis, dass Werttypen auf dem Array zugewiesen werden Stapel- und Referenztypen auf dem Heap sind nicht ganz korrekt. Alle lokalen Variablen und Parameter werden unabhängig vom Typ auf dem Stapel zugewiesen. Der Hauptunterschied liegt darin, was in diesen Variablen gespeichert ist:

  • Werttypen:Der tatsächliche Wert wird direkt in der Variablen gespeichert.
  • Referenz Typen: Ein Verweis auf den auf dem Heap gespeicherten Wert wird im gespeichert Variable.

Speicherzuweisung für Wert- und Referenztypen

Sowohl Wert- als auch Referenztypen belegen eine bestimmte Menge an Speicher, typischerweise 16 Bytes für die bereitgestellten Beispieltypen . Innerhalb dieses Speichers:

  • Bei Werttypen speichern alle Felder ihre jeweiligen Werte direkt.
  • Bei Referenztypen speichern Referenztypfelder Verweise auf Werte, die sich auf dem Heap befinden, während Wert -Felder speichern ihre tatsächlichen Werte.

Beispiel: Stack und Heap Zuweisung

Berücksichtigen Sie die folgenden lokalen Variablen:

RefType refType;
ValType valType;
int[] intArray;
Nach dem Login kopieren

Anfänglich befinden sich nur ihre Referenzen auf dem Stapel und belegen 20 Bytes:

 0 ┌───────────────────┐
   │     refType       │
 4 ├───────────────────┤
   │     valType       │
   │                   │
   │                   │
   │                   │
20 ├───────────────────┤
   │     intArray      │
24 └───────────────────┘
Nach dem Login kopieren

Bei der Zuweisung Werte zu diesen Variablen:

// Assign values to refType
// ...
// Assign values to valType
// ...
intArray = new int[4];
intArray[0] = 300;
// ...
intArray[3] = 303;
Nach dem Login kopieren

Die Stapeldarstellung würde ähneln:

 0 ┌───────────────────┐
   │    0x4A963B68     │ -- heap address of `refType`
 4 ├───────────────────┤
   │       200         │ -- value of `valType.I`
   │    0x4A984C10     │ -- heap address of `valType.S`
   │    0x44556677     │ -- low 32-bits of `valType.L`
   │    0x00112233     │ -- high 32-bits of `valType.L`
20 ├───────────────────┤
   │    0x4AA4C288     │ -- heap address of `intArray`
24 └───────────────────┘
Nach dem Login kopieren

Sowohl das Array als auch die Wert- und Referenztypen belegen bestimmte Abschnitte des Heaps mit Speicherlayouts wie zuvor beschrieben.

Zusammenfassend ist das Array myIntegers wird auf dem Heap zugewiesen, während die darin gespeicherten einzelnen Ganzzahlwerte nicht eingerahmt sind. Sie werden einfach direkt im zugewiesenen Speicher auf dem Heap gespeichert, ohne dass sie in zusätzliche Objekte verpackt werden müssen.

Das obige ist der detaillierte Inhalt vonHeap- vs. Stack-Zuordnung: Wo befinden sich Arrays und Werttypen im Speicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage