Как объект с типом значения и ссылочным типом будет храниться в .NET? - PullRequest
3 голосов
/ 05 октября 2010

В .NET целочисленный тип данных - это тип значения (стек), а String - ссылочный тип (куча).

Итак, если в классе A есть целое число и объект строкового типа,и класс B создает объект класса A, тогда как этот объект класса A будет храниться в памяти?В стеке или в куче?

Об этом спрашивали в моем интервью с Microsoft.Нужно понять, как у меня дела.

Ответы [ 4 ]

9 голосов
/ 05 октября 2010

Эрик Липперт только что написал об этом :

Это просто неверно, что выбор, использовать ли стек или кучу, имеет какое-то принципиальное отношение к типу хранимой вещи.

Правдивая история:

"в реализации Microsoft C # на настольном CLR типы значений хранятся в стеке, когда значение является локальной или временной переменной, которая не является закрытой локальной переменной лямбда или анонимного метода, и метод body не является блоком итератора, и джиттер решает не регистрировать значение. "

Самое главное, он подчеркивает, что вам просто не должно волновать , где живет тип . Вы должны заботиться о том, где живут вещей определенной жизни

3 голосов
/ 05 октября 2010

Как правило, , в стеке оказываются только те типы значений, которые локальные переменные .Остальное, включая поля классов, хранится в куче.

На самом деле ситуация более сложная;см. ссылку на блог Эрика Липперта, приведенную в ответе Рекса М.

0 голосов
/ 12 апреля 2018

Это был просто сложный вопрос. Я думаю, что вопрос был задан вам, чтобы проверить свои знания о классах в DotNet. Классы являются ссылочным типом. Так что простыми словами он пойдет в раздел кучи.

0 голосов
/ 05 октября 2010

Если я правильно помню, объекты всегда являются ссылочными типами, независимо от их типов элементов.

Таким образом, любой объект класса A будет храниться в куче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...