C# 在何处存储对引用类型的堆内存的引用?
简单代码,例如:C# 在何处存储对引用类型的堆内存的引用?,c#,.net,reference-type,C#,.net,Reference Type,简单代码,例如: Object test=new Object(); 我知道test对象的内存分配到了堆中 引用MSDN: 引用类型的变量存储对其数据(对象)的引用 但我真的不明白这个变量值(对堆数据的引用)存储在堆栈、堆或其他地方的什么地方?test变量存储在堆栈上-它保存堆上对象的地址。对象实例存储在堆上 我建议你们阅读杰弗里·里克特的文章: 从托管堆分配对象时,新的运算符 返回对象的内存地址。你通常会储存这个 变量中的地址。这称为引用类型变量 因为变量实际上不包含对象的位; 相反,变量引
Object test=new Object();
我知道test
对象的内存分配到了堆中
引用MSDN:
引用类型的变量存储对其数据(对象)的引用
但我真的不明白这个变量值(对堆数据的引用)存储在堆栈、堆或其他地方的什么地方?
test
变量存储在堆栈上-它保存堆上对象的地址。对象实例存储在堆上
我建议你们阅读杰弗里·里克特的文章:
从托管堆分配对象时,新的运算符
返回对象的内存地址。你通常会储存这个
变量中的地址。这称为引用类型变量
因为变量实际上不包含对象的位;
相反,变量引用对象的位
除了引用类型之外,虚拟对象系统还支持
称为值类型的轻量级类型。无法创建值类型对象
在垃圾收集堆上分配,变量表示
对象不包含指向对象的指针;变量
包含对象本身。由于变量包含对象,因此
指针无需取消引用即可操作
对象当然,这可以提高性能
谢谢你的回答。你能从msdn或其他来源添加证据吗?@Frank59在msdn上很难找到关于这方面的文档,但这里有一篇关于这个主题的好文章@Frank59文章说变量存储在堆栈上。它还表示引用类型实例是在堆上分配的。我认为您应该通过C#book了解Jeffrey Richter CLR,该书描述了CLR的内部结构,只是做了一些轻微的修改。
test
没有保存堆上对象的地址。它保存对堆上实际地址的引用。用户不能将引用视为地址,事实上,它们在实现中不一定包含地址