2014-01-21 3 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) статья гласит, что переменные хранятся на стеке. В нем также говорится, что экземпляры ссылочного типа выделяются в кучу. Я думаю, вам стоит взглянуть на CLR Jeffrey Richter через книгу C#, в которой очень хорошо описаны внутренние среды CLR. –

Смежные вопросы