Array-Zuordnung und Werttypen auf Stack vs. Heap
In Ihrem Code-Snippet:
int[] myIntegers; myIntegers = new int[100];
wenn Sie Wenn Sie das Array myIntegers mit dem Schlüsselwort new erstellen, wird das Array selbst auf dem Heap zugewiesen, wie von der CLR vorgeschlagen. Allerdings sind die ganzzahligen Elemente innerhalb des Arrays, da es sich um Werttypen handelt, nicht eingerahmt.
Stapel- und lokale Variablen
Alle lokalen Variablen in einer Funktion, einschließlich Werttypen und Referenztypen werden auf dem Stapel zugewiesen. Der Unterschied zwischen den beiden liegt darin, was in diesen Variablen gespeichert ist.
Beispiel für RefTypes und ValTypes
Berücksichtigen Sie die folgenden Typen:
class RefType { public int I; public string S; public long L; } struct ValType { public int I; public string S; public long L; }
Der Wert jedes Typs erfordert 16 Byte Speicher: 4 Byte für I, 4 Byte für die S-Referenz (oder die tatsächliche). S-Zeichenfolge für ValType) und 8 Bytes für L.
Wenn Sie lokale Variablen vom Typ RefType, ValType und haben int[] würden sie wie folgt auf dem Stapel zugewiesen:
Stack: 0-3 bytes: RefType variable 4-7 bytes: ValType variable 8-11 bytes: int[] variable
Speicherlayout
Beim Zuweisen von Werten zu diesen Variablen:
refType = new RefType(); refType.I = 100; refType.S = "refType.S"; refType.L = 0x0123456789ABCDEF; valType = new ValType(); valType.I = 200; valType.S = "valType.S"; valType.L = 0x0011223344556677; intArray = new int[4]; intArray[0] = 300; intArray[1] = 301; intArray[2] = 302; intArray[3] = 303;
Die Werte werden im Folgenden verteilt Art und Weise:
Stack: 0-3 bytes: Heap address of `refType` 4-7 bytes: Value of `valType.I` 8-11 bytes: Heap address of `valType.S` 12-15 bytes: Low 32-bits of `valType.L` 16-19 bytes: High 32-bits of `valType.L` 20-23 bytes: Heap address of `intArray`
Heap:
An der Heap-Adresse von refType:
Auf dem Heap von intArray Adresse:
**Passing Arrays**
Das obige ist der detaillierte Inhalt vonWie werden Arrays und Werttypen auf dem Stack und Heap in C# zugewiesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!