Значимый тип хранит само значение, ссылочный — ссылку на объект; правило «struct всегда в стеке» неверно. Поколения GC помогают чаще собирать короткоживущие объекты и реже обходить долгоживущие.
Где в памяти размещаются значимые и ссылочные типы, и как устроены поколения GC?
Значимый тип хранит само значение, ссылочный — ссылку на объект; правило «struct всегда в стеке» неверно. Поколения GC помогают чаще собирать короткоживущие объекты и реже обходить долгоживущие.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Значимый тип хранит само значение, ссылочный — ссылку на объект; правило «struct всегда в стеке» неверно. Поколения GC помогают чаще собирать короткоживущие объекты и реже обходить долгоживущие.
Структура может быть локальной, полем объекта, элементом массива или упакованным объектом. Следовательно, место её хранения зависит от контекста; JIT может также использовать регистры и оптимизации. Объекты ссылочных типов обычно размещаются в управляемой куче.
В GC есть поколения 0, 1 и 2. Выжившие объекты обычно продвигаются в старшие; сборка старшего поколения включает младшие. Большие объекты относятся к LOH и собираются вместе с поколением 2. Сборщик определяет достижимость от корней, а не считает ссылки.
Источник: learn.microsoft.com.