Если вы имеете в виду «где в памяти хранятся данные - в стеке или в куче», это становится довольно сложным и частично зависит от языка.
Я написал статью об этом , в которой более подробно, чем я хочу повторить здесь. Упрощенные объяснения, такие как часто повторяемые «типы значений живут в стеке, ссылочные типы живут в куче», чрезвычайно ошибочны, с очевидным контрпримером переменной int
в ссылочном типе - значение этой переменной всегда будет хранится в куче, хотя int
является типом значения.
Тем не менее, вам также было бы целесообразно прочитать сообщение Эрика Липперта в блоге по этому вопросу - это проблема реализации, и разработчики, как правило, слишком беспокоятся об этом. Команда C # может решить изменить все это в более поздней версии и создать новый объект, содержащий все локальные переменные (а не только захваченные).
По общему признанию, это важная деталь реализации - сколько вы кладете в стек, влияет на то, насколько глубоким может быть ваш стек и т. Д., - но мы, вероятно, должны потратить столько времени на одержимость этим.
Если это не , о котором вы предполагали задать вопрос, уточните его. Например, вы могли бы иметь в виду:
- Где существуют метаданные типа во время выполнения?
- Где хранятся типы BCL на диске?
- Где существует JIT-скомпилированный код для типов и хранится ли он?