Heim > Backend-Entwicklung > C++ > Heap oder Stack: Wo ordnet „neu' Strukturen in C# zu?

Heap oder Stack: Wo ordnet „neu' Strukturen in C# zu?

Patricia Arquette
Freigeben: 2025-01-13 15:06:46
Original
836 Leute haben es durchsucht

Heap or Stack: Where Does `new` Allocate Structs in C#?

Speicherzuweisung der Struktur durch den new-Operator in C#: Heap oder Stack?

Wenn eine Klasse mit dem Operator new instanziiert wird, wird Speicher auf dem Heap zugewiesen. Das Verhalten des new-Operators auf Strukturen hängt jedoch vom jeweiligen Szenario ab. Lassen Sie uns die Unterschiede erkunden:

Konstruktor mit Parametern

Beim Aufrufen des parametrisierten Konstruktors einer Struktur mit new wird Speicher auf dem Stapel zugewiesen. Dies ähnelt der Zuweisung eines Werts zu einer lokalen Variablen eines Werttyps.

<code class="language-csharp">Guid local = new Guid("");</code>
Nach dem Login kopieren

Der zugewiesene IL-Code verwendet newobj, um Speicher auf dem Stapel zuzuweisen und den Wert mithilfe der bereitgestellten Zeichenfolge zu initialisieren.

Konstruktor ohne Parameter

Beim Aufruf des parameterlosen Konstruktors einer Struktur mit new hängt das Verhalten vom Kontext ab:

  • wird einem Feld oder einer lokalen Variablen zugewiesen:

Auf dem Stapel wird kein Speicher zugewiesen. Verwenden Sie stattdessen initobj, um einen vorhandenen Speicherort (Feld oder lokale Variable) zu initialisieren. Werttypen werden vor Ort erstellt.

<code class="language-csharp">Guid field;
...
field = new Guid();</code>
Nach dem Login kopieren
  • Zwischenwert des Methodenaufrufs:

Ordnen Sie eine temporäre lokale Variable auf dem Stapel zu und initialisieren Sie sie mit initobj. Dieser Wert wird dann als Parameter an die Methode übergeben.

<code class="language-csharp">MethodTakingGuid(new Guid());</code>
Nach dem Login kopieren
  • wird Instanzvariablen oder statischen Variablen zugewiesen:

Auf dem Stapel wird kein Speicher zugewiesen. Werttypen werden direkt am Speicherort der Instanz oder statischen Variablen erstellt.

<code class="language-csharp">myInstance.GuidProperty = new Guid();</code>
Nach dem Login kopieren

Fazit

Das Zuweisungsverhalten des

new-Operators bei Verwendung mit einer Struktur hängt vom Kontext ab. Bei Konstruktoren mit Parametern wird Speicher immer auf dem Stapel zugewiesen. Bei parameterlosen Konstruktoren wird je nach Kontext möglicherweise kein Speicher auf dem Stapel zugewiesen. Dieses Verhalten hängt stark von den IL-Anweisungen ab, die der Compiler beim Konvertieren von C#-Code generiert.

Das obige ist der detaillierte Inhalt vonHeap oder Stack: Wo ordnet „neu' Strukturen in C# zu?. 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