堆疊與堆疊上的陣列分配和值類型
在您的程式碼片段中:
int[] myIntegers; myIntegers = new int[100];
當您使用new 關鍵字建立陣列myIntegers,則陣列本身會依照CLR 的建議在堆疊上分配。但是,數組中的整數元素作為值類型,不會裝箱。
堆疊和局部變數
函數中的所有局部變量,包括值類型和參考類型,在堆疊上分配。兩者之間的差異在於這些變數中儲存的內容。
RefType 和的範例ValTypes
考慮以下類型:
class RefType { public int I; public string S; public long L; } struct ValType { public int I; public string S; public long L; }
每種類型的值需要16 個位元組的記憶體:4 個位元組用於I,4 個位元組用於S 引用(或實際值) S 字串(ValType),L為 8 個位元組。
如果您有RefType、ValType 和類型的局部變數int[],它們將如下在堆疊上分配:
Stack: 0-3 bytes: RefType variable 4-7 bytes: ValType variable 8-11 bytes: int[] variable
記憶體佈局
為這些變數賦值時:
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;
值將分佈在以下位置方式:
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`
堆:
在refType的堆疊位址:
的高32 位
**Passing Arrays**
以上是在 C# 中,陣列和值類型如何在堆疊和堆疊上分配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!