Всегда ли структура лежит на стеке
Вопрос
Какое утверждение о размещении типов значений верно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Структуры всегда размещаются на стеке, а классы всегда в куче
- Структуры всегда размещаются в куче, но без счётчика ссылок
- Размещение задаётся атрибутом
@stackу объявления типа - Значение может уехать в кучу, например при захвате escaping-замыканиемправильный ответ
Разбор
Семантика (значение или ссылка) и размещение это разные вещи. Локальная структура обычно в стеке или регистрах, но её содержимое уезжает в кучу, если её захватило escaping-замыкание, если она поле класса, элемент массива (буфер массива в куче) или не влезает в inline-буфер existential any P (3 машинных слова). Атрибута @stack нет. Оптимизатор может и объект класса разместить на стеке, если он не убегает из функции.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Чем struct отличается от class в Swift
Следующий вопрос
Что происходит при присваивании структуры в Swift
Ещё по теме «Типы значений и ссылочные»
- Copy-on-write у Array: когда копируется буфер
- Модификаторы borrowing и consuming
- Как сделать свой copy-on-write
- Existential container: как хранится any Protocol
- Типы значений и ссылочные типы в Swift
- Оператор === в Swift
- Зачем indirect у enum
- Задача на Swift: стек отмены для текстового поля