在哪里存储对堆内存的引用以用于引用类型?

时间:2014-01-21 16:00:21

标签: c# .net reference-type

简单代码例如:

Object test=new Object();

我理解将test对象的内存分配到堆中。

来自MSDN:

  

引用类型的变量存储对其数据(对象)的引用

但我真的无法理解将这个变量值(对堆数据的引用)存储到堆栈或堆或其他地方的位置?

1 个答案:

答案 0 :(得分:5)

test变量存储在堆栈中 - 它保存堆上对象的地址。对象实例存储在堆上。

我建议你阅读杰弗里里希特的.NET Type Fundamentals文章:

  

从托管堆分配对象时,new运算符   返回对象的内存地址。你通常存储这个   变量中的地址。这称为引用类型变量   因为变量实际上并不包含对象的位;   相反,变量引用对象的位。

     

除引用类型外,虚拟对象系统还支持   轻量级类型称为值类型。值类型对象不能   在垃圾收集堆上分配,以及表示的变量   该对象不包含指向对象的指针;变量   包含对象本身。由于变量包含对象,a   指针不必被解除引用以便操纵   宾语。当然,这可以提高性能。