如何将一组值类型存储在.NET对象堆中?

sup*_*che 4 .net c# heap

在.NET中,诸如int之类的值类型对象存储在内存中.

引用类型对象需要为引用和对象单独分配内存,并且对象存储在.NET对象堆中.

并且在堆中创建了Array,那么如何将一个值类型数组(如int [])存储在堆中?是否意味着值类型对象可以存储在堆中而不需要装箱?

xan*_*tos 6

是的,你是对的.我建议你读这个:

http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx

它非常好,几乎可以解释你想知道的一切.


Jon*_*eet 5

是的,数组是一种无需装箱即可将值类型值存储在堆上的方式。另一种是在普通课堂上进行:

public class Foo
{
    int value1;
    string name;
    // etc
}
Run Code Online (Sandbox Code Playgroud)

与 的实例关联的所有变量都Foo存储在堆上。的值value1只是int,而 的值name是字符串引用。

这就是为什么“值类型存储在堆栈上,引用类型存储在堆上”的说法明显不正确。

然而,正如 Eric Lippert正确地指出的那样,堆栈/堆的区别是一个实现细节。例如,未来版本的 CLR可以在堆栈上存储一些对象,前提是它可以确定在方法终止后不再需要这些对象。