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>
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:
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>
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>
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>
Fazit
Das Zuweisungsverhalten desnew
-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!