2
例如簡單的代碼:哪裏存儲引用類型的堆內存引用?
Object test=new Object();
我理解分爲堆test
對象存儲器。
報價從MSDN:引用類型引用存儲到其數據
變量(對象)
但我真的不明白的地方存放這個變量值(堆數據引用) ,堆棧或堆或另一個地方?
例如簡單的代碼:哪裏存儲引用類型的堆內存引用?
Object test=new Object();
我理解分爲堆test
對象存儲器。
報價從MSDN:引用類型引用存儲到其數據
變量(對象)
但我真的不明白的地方存放這個變量值(堆數據引用) ,堆棧或堆或另一個地方?
test
變量存儲在堆棧上 - 它保存堆上的對象的地址。對象實例存儲在堆上。
我建議你傑弗裏裏希特閱讀.NET Type Fundamentals文章:
當一個對象從託管堆,新的運營商 返回對象的內存地址分配。你通常將這個 地址存儲在一個變量中。這稱爲參考類型變量 ,因爲變量實際上不包含對象的位;相反,變量指的是對象的位。
除了引用類型,虛擬對象系統還支持稱爲值類型的輕量級類型。值類型對象不能在垃圾回收堆上分配 ,而代表 的變量對象不包含指向對象的指針;變量 包含對象本身。由於該變量包含對象,因此不必爲了操作 對象而取消引用 指針。這當然會提高性能。
謝謝你的回答。你可以從msdn或其他來源添加證明嗎? – Frank59
@ Frank59在msdn上很難找到關於這個的文檔,但這裏有一篇關於這個主題的好文章http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c- b3f6-40b5-98b5-413b6d348b91 – Gusdor
@ Frank59 [值和參考類型](http://msdn.microsoft.com/en-us/library/4d43ts61(v = vs.90).aspx)文章說變量被存儲在堆棧上。它還表示引用類型實例分配在堆上。我認爲你應該通過C#書來看看Jeffrey Richter CLR,它描述CLR內部結構非常好 –