Выбор ответа Senior Типы значений и ссылочные обновлено

Всегда ли структура лежит на стеке

Вопрос

Какое утверждение о размещении типов значений верно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Значение может уехать в кучу, например при захвате escaping-замыканием. Семантика (значение или ссылка) и размещение это разные вещи.

Варианты ответа

  1. Структуры всегда размещаются на стеке, а классы всегда в куче
  2. Структуры всегда размещаются в куче, но без счётчика ссылок
  3. Размещение задаётся атрибутом @stack у объявления типа
  4. Значение может уехать в кучу, например при захвате escaping-замыканиемправильный ответ

Разбор

Семантика (значение или ссылка) и размещение это разные вещи. Локальная структура обычно в стеке или регистрах, но её содержимое уезжает в кучу, если её захватило escaping-замыкание, если она поле класса, элемент массива (буфер массива в куче) или не влезает в inline-буфер existential any P (3 машинных слова). Атрибута @stack нет. Оптимизатор может и объект класса разместить на стеке, если он не убегает из функции.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.