Карточка Senior Типы значений и ссылочные обновлено
Existential container: как хранится any Protocol
Вопрос
Как хранится значение типа any Drawable и почему маленькие структуры дешевле больших?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
В existential container: inline-буфер на 3 машинных слова, указатель на метаданные типа и таблицы witness для протоколов. Значение до 3 слов лежит прямо в буфере, большее упаковывается в кучу.
Ответ
В existential container: inline-буфер на 3 машинных слова, указатель на метаданные типа и таблицы witness для протоколов. Значение до 3 слов лежит прямо в буфере, большее упаковывается в кучу.
Разбор
Отсюда совет: для горячего кода предпочитать дженерики и some, где тип известен статически и нет упаковки и динамической диспетчеризации.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как сделать свой copy-on-write
Следующий вопрос
Типы значений и ссылочные типы в Swift
Ещё по теме «Типы значений и ссылочные»
- Copy-on-write у Array: когда копируется буфер
- Модификаторы borrowing и consuming
- Оператор === в Swift
- Зачем indirect у enum
- Задача на Swift: стек отмены для текстового поля
- let и экземпляр класса: можно ли менять свойства
- Типы Swift: значение или ссылка
- Когда пропадает memberwise-инициализатор структуры