堆栈与堆上的数组分配和值类型
在您的代码片段中:
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中文网其他相关文章!