为数组分配内存

时间:2011-06-21 07:23:29

标签: c# memory-management

所有类型都是从Object类派生的,但是值 类型未在堆上分配。值类型变量实际包含 他们的价值观那么如何将这些类型存储在数组中并用于 期望参考变量的方法?有人可以解释一下这些值类型如何作为数组的一部分存储在堆上吗?

4 个答案:

答案 0 :(得分:3)

Boxing and Unboxing。另请参阅Here以获取有关阵列的信息(部分向下)。请注意,这是针对对象数组的,值类型数组(例如int[])没有任何(联合国)装箱。

答案 1 :(得分:1)

看看这个问题:

Arrays, heap and stack and value types

您可以将值类型的实例传递给期望对象(ref class)的方法。在这种情况下,发生装箱和拆箱。

值类型数组不需要装箱或拆箱!

答案 2 :(得分:0)

CLR专门处理值类型的数组。当然,数组是在堆上分配的引用类型,但值类型值嵌入到堆记录中(不在堆栈中)。

类似地,当引用类型类包含值类型字段时,该字段的值将嵌入到堆上的记录中。

答案 3 :(得分:0)

值类型可能在堆栈上分配。 只有当它们位于参数或局部变量或另一个值类型的字段中时才会发生这种情况。

数组中的值类型和类中的字段本地存储在数组或类中,而不是存储在那里的指针 - 值类型导致更多本地内存访问(性能改进) 并且在数组的情况下,值n在内存中的值n-1之后,对于引用类型数组中的对象(包括对象数组中的盒装值 - 也没有连续性的受让者)不能保证。在引用类型的数组中,它是连续的引用。