Heim >Backend-Entwicklung >C++ >Wo befinden sich Objekte im Speicher: im Stapel, im Heap oder woanders?

Wo befinden sich Objekte im Speicher: im Stapel, im Heap oder woanders?

Linda Hamilton
Linda HamiltonOriginal
2024-11-14 19:05:02754Durchsuche

Where Do Objects Reside in Memory: Stack, Heap, or Somewhere Else?

Stack vs. Heap-Objekterstellung

Die Frage wirft Bedenken hinsichtlich der Objekterstellung auf dem Stack oder Heap auf. Während der bereitgestellte Code (Object o:) die Objekterstellung auf dem Stapel impliziert, erwähnt er Stapel oder Heap nicht explizit. Lassen Sie uns diese Unterscheidung klären.

In C wird der Speicherort eines Objekts im Speicher durch seine Speicherdauer bestimmt, nicht speziell durch Stack oder Heap. Es gibt vier Speicherdauern: automatisch, dynamisch, statisch und threadlokal. Der automatische Speicher wird hauptsächlich für lokale Variablen im Aufrufstapel verwendet, während der dynamische Speicher für Objekte verwendet wird, die mit „neu“ auf dem Heap zugewiesen werden.

  • Stapel: Normalerweise automatischer Speicher reserviert für lokale Variablen.
  • Heap: Dynamischer Speicher, wird für Objekte verwendet, die mit „new“ erstellt wurden.
  • Statischer Speicher: Statisch (oder Thread -local) Objekte befinden sich weder im Stapel noch im Heap, normalerweise in einer separaten Region.

Objekterstellung

  • Objekt o; // Lokale Variable mit automatischer Speicherung (Stack)
  • Object o = Object(); // Dynamischer Speicher (Heap)
  • Object* o; // Zeiger auf ein Objekt mit automatischer Speicherung (Stack)
  • Object* o = new Object(); // Zeiger auf ein Objekt mit dynamischer Speicherung (Heap)

Kontext und Speicherdauer

Die Speicherdauer eines Objekts wird durch seinen Kontext bestimmt. Zum Beispiel:

  • foo.o: Mitgliedsvariable in einem statisch zugewiesenen Objekt (weder Stack noch Heap)
  • f.o: Mitglied Variable in einem lokal zugewiesenen Objekt (Stapel)
  • p->o:Mitgliedsvariable in einem dynamisch zugewiesenen Objekt (Heap)

Zeiger und Speicherung

Zeiger selbst sind Objekte und folgen denselben Speicherregeln. Ihre Speicherung wird durch ihren Kontext bestimmt, nicht durch den Typ, auf den sie verweisen. Der Typ, auf den sie zeigen, bestimmt die Speicherdauer des gezeigten Objekts.

Insgesamt ist das Verständnis der Speicherdauer entscheidend für das Verständnis der Speicherverwaltung in C. Objekte können sich je nach Speicherdauer und Kontext in unterschiedlichen Speicherbereichen befinden.

Das obige ist der detaillierte Inhalt vonWo befinden sich Objekte im Speicher: im Stapel, im Heap oder woanders?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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