Как стать автором
Обновить

Комментарии 7

Структура StructForProperty имеет в своем составе переменную ссылочного типа, поэтому ничего удивительного.

А зачем экономить стек ?) То есть дизайнеры свифта специально придумали структуры чтобы как можно больше хранить в стэке, а вы предлагаете от него отказаться... Это как поставить в комп 60 Гб оперативы и использовать только 6 Гб, а остальное свапать на диск. Да, размер стэка влияет на размер бинарника, но не считаю это весомым аргументом отказываться от структур.

Еще можно рассказать про release/retain для полей структур и классов и какой оверхед рантайма происходит при передачи этих объектов )

размер стэка влияет на размер бинарника

Это где? И почему?

Ведь скорость работы структур достигается не какой-то магической силой) Моё понимание, что компилятор разворачивает структуры на стеке, это дополнительные инструкции, которые будут сохранены в data (или text) сегменте бинарника. То есть вместо хранения одной reference переменной на инстанс класса в heap, в функцию будет скопирована вся структуру со всеми полями. https://stackoverflow.com/questions/52372423/why-does-usage-of-structs-increase-applications-binary-size и https://forums.swift.org/t/how-do-structs-increase-binary-size/35208. Получается аналогия с инлайнингом функций, которые тоже увеличивают размер приложения.

Где-то видел статью, что человек переделал несколько сотен структур на классы и размер приложения уменьшился на 13 мб, но не могу найти ссылку.

Использовать структуры с использованием протоколов плохо для Stack, но хорошо для скорости выполнения.

возможно callsite действительно будет быстрым, но сама инжекция объекта по коду будет медленной из-за release/retain и чем больше reference полей будет у структуры тем существенней будет проседать райнтайм.

Интересные замечания, буду углубляться)

Кажется, что размер стека – это параметр, который вполне может быть рассчитан на этапе компиляции (если Вы не используете рекурсию). Поэтому проблем с переполнением стека в вашей программе быть не должно (компилятор подсчитает и установит необходимый вам размер стека) и сам этот пункт можно исключить из списка недостатков структур.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории