简单代码例如:
Object test=new Object();
我理解将test
对象的内存分配到堆中。
来自MSDN:
引用类型的变量存储对其数据(对象)的引用
但我真的无法理解将这个变量值(对堆数据的引用)存储到堆栈或堆或其他地方的位置?
答案 0 :(得分:5)
test
变量存储在堆栈中 - 它保存堆上对象的地址。对象实例存储在堆上。
我建议你阅读杰弗里里希特的.NET Type Fundamentals文章:
从托管堆分配对象时,new运算符 返回对象的内存地址。你通常存储这个 变量中的地址。这称为引用类型变量 因为变量实际上并不包含对象的位; 相反,变量引用对象的位。
除引用类型外,虚拟对象系统还支持 轻量级类型称为值类型。值类型对象不能 在垃圾收集堆上分配,以及表示的变量 该对象不包含指向对象的指针;变量 包含对象本身。由于变量包含对象,a 指针不必被解除引用以便操纵 宾语。当然,这可以提高性能。