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

Fra*_*k59 3 .net c# reference-type

简单代码例如:

Object test=new Object();
Run Code Online (Sandbox Code Playgroud)

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

从MSDN引用:

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

但我真的无法理解存储此变量值(引用堆数据),堆栈或堆入或其他地方的位置?

Ser*_*kiy 5

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

我建议你阅读Jeffrey Richter的.NET Type Fundamentals文章:

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

除引用类型外,虚拟对象系统还支持称为值类型的轻量级类型.无法在垃圾收集堆上分配值类型对象,表示该对象的变量不包含指向对象的指针; 变量包含对象本身.由于变量包含对象,因此不必取消引用指针以操纵对象.当然,这可以提高性能.

  • 轻微校正.test`不保存堆上对象的地址.它在堆上保存_reference_到实际地址.**"引用不能被用户视为地址,事实上,它们不一定在实现中包含地址."**[引用不是地址](http://blogs.msdn.com/b/ ericlippert /存档/ 2009/02/17 /引用 - 是 - 不addresses.aspx) (2认同)