Где в памяти размещаются значимые и ссылочные типы, и как устроены поколения GC?

Значимый тип хранит само значение, ссылочный — ссылку на объект; правило «struct всегда в стеке» неверно. Поколения GC помогают чаще собирать короткоживущие объекты и реже обходить долгоживущие.

Короткий ответ

Что ответить на собеседовании

Значимый тип хранит само значение, ссылочный — ссылку на объект; правило «struct всегда в стеке» неверно. Поколения GC помогают чаще собирать короткоживущие объекты и реже обходить долгоживущие.

Подробный разбор

Ответ с пояснениями

Значимый тип хранит само значение, ссылочный — ссылку на объект; правило «struct всегда в стеке» неверно. Поколения GC помогают чаще собирать короткоживущие объекты и реже обходить долгоживущие.

Структура может быть локальной, полем объекта, элементом массива или упакованным объектом. Следовательно, место её хранения зависит от контекста; JIT может также использовать регистры и оптимизации. Объекты ссылочных типов обычно размещаются в управляемой куче.

В GC есть поколения 0, 1 и 2. Выжившие объекты обычно продвигаются в старшие; сборка старшего поколения включает младшие. Большие объекты относятся к LOH и собираются вместе с поколением 2. Сборщик определяет достижимость от корней, а не считает ссылки.

Источник: learn.microsoft.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее