Heim >Backend-Entwicklung >C++ >Wo werden Verweise auf Objekte gespeichert, wenn sie im Stapel oder im Heap erstellt werden?

Wo werden Verweise auf Objekte gespeichert, wenn sie im Stapel oder im Heap erstellt werden?

Linda Hamilton
Linda HamiltonOriginal
2024-11-27 01:52:13937Durchsuche

Where are References to Objects Stored when Created on the Stack vs. the Heap?

Objekterstellung auf dem Stapel oder Heap:

Es stellt sich die Frage: Wenn ein Objekt auf dem Stapel oder auf dem Heap erstellt wird, wo sind Referenzen? zu den tatsächlich gespeicherten Objekten?

In C wird die Objektspeicherung durch ihren Kontext, nämlich ihre Speicherung, bestimmt Dauer:

Objekt o erstellt ein Objekt mit:

  • Automatische Speicherung: Wenn lokal innerhalb einer Funktion deklariert, befindet sich das Objekt auf der Stapel.
  • Statischer Speicher: Sofern bei deklariert Namespace- oder Dateibereich, das Objekt wird in einem dedizierten Speicherbereich außerhalb des Stapels oder Heaps platziert.
  • Mitgliedsvariable: Wenn als Unterobjekt innerhalb eines anderen Objekts deklariert, Es erbt die Speicherdauer des enthaltenden Objekts.

Object* o erstellt einen Zeiger mit automatischer Funktion Speicher.

Zeiger werden wie jedes andere Objekt auf dem Stapel zugewiesen. Ihre Speicherdauer wird durch ihren Kontext bestimmt, nicht durch den Initialisierungsausdruck.

Zum Beispiel im folgenden Codefragment:

struct Foo {
    Object o;
};

Foo foo, f;
Foo* p = new Foo;
Foo* pf = &f;
  • foo.o hat auch keinen statischen Speicher weder auf dem Stapel noch auf dem Heap, da foo selbst über statischen Speicher verfügt.
  • f.o verfügt über einen automatischen Speicher und befindet sich auf dem Stapel, ebenso wie f über einen automatischen Speicher verfügt Speicher.
  • p->o verfügt über dynamischen Speicher auf dem Heap, da *p über dynamischen Speicher verfügt.
  • pf->o und f.o verweisen auf dasselbe Objekt, da pf direkt zeigt bis f.

Zusammenfassend lässt sich sagen, dass der Speicherort eines Objekts ausschließlich von seinem Kontext abhängt, während Zeiger immer auf dem Stapel zugeordnet sind, aber auf Objekte unterschiedlichen Speichers verweisen können Dauer.

Das obige ist der detaillierte Inhalt vonWo werden Verweise auf Objekte gespeichert, wenn sie im Stapel oder im Heap erstellt werden?. 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