2014-01-21 55 views
2

例如简单的代码:哪里存储引用类型的堆内存引用?

Object test=new Object(); 

我理解分为堆test对象存储器。

报价从MSDN:引用类型引用存储到其数据

变量(对象)

但我真的不明白的地方存放这个变量值(堆数据引用) ,堆栈或堆或另一个地方?

回答

4

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

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

当一个对象从托管堆,新的运营商 返回对象的内存地址分配。你通常将这个 地址存储在一个变量中。这称为参考类型变量 ,因为变量实际上不包含对象的位;相反,变量指的是对象的位。

除了引用类型,虚拟对象系统还支持称为值类型的轻量级类型。值类型对象不能在垃圾回收堆上分配 ,而代表 的变量对象不包含指向对象的指针;变量 包含对象本身。由于该变量包含对象,因此不必为了操作 对象而取消引用 指针。这当然会提高性能。

+0

谢谢你的回答。你可以从msdn或其他来源添加证明吗? – Frank59

+0

@ Frank59在msdn上很难找到关于这个的文档,但这里有一篇关于这个主题的好文章http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c- b3f6-40b5-98b5-413b6d348b91 – Gusdor

+0

@ Frank59 [值和参考类型](http://msdn.microsoft.com/en-us/library/4d43ts61(v = vs.90).aspx)文章说变量被存储在堆栈上。它还表示引用类型实例分配在堆上。我认为你应该通过C#书来看看Jeffrey Richter CLR,它描述CLR内部结构非常好 –