Skip to content

Latest commit

 

History

History
31 lines (19 loc) · 4.48 KB

File metadata and controls

31 lines (19 loc) · 4.48 KB

Copy On Write (CoW)

  1. Understanding Swift Copy-on-Write mechanisms

Зачем CoW нужна

Value Types (хранятся в стеке) Reference Types (хранятся в куче)
Основные типы данных: Int, Bool, Char Closure
Struct Class
Enum Function
Float, Double
Tuple
Collections: Set, String, Array, Dictionary

Основным отличием ссылочных типов от типов значений является то, что первые передаются по ссылкам, в то время как вторые копируются.

На скорость копирования влияет то, что примитивные типы, такие как целые числа и числа с плавающей запятой, хранятся в регистрах ЦП, и при их копировании нет необходимости обращаться к оперативной памяти. Но большинство расширяемых типов Swift, таких как строки, массивы, наборы и словари, используют другую логику - копируются при записи(copy-on-write).

У этого есть ряд своих плюсов таких как то, что типы значений работают быстрее, потому что хранятся на стеке, а не в куче, используют статическую диспетчеризацию и прочее.

Однако можно задаться вопросом “а зачем копировать данные, если мы их не меняем?”. Пример, представьте себе массив с 1000 элементами внутри него: если вы скопируете этот массив в другую переменную, Swift должен будет скопировать все 1000 элементов, даже если два массива окажутся одинаковыми.

Эта проблема решается с помощью копирования при записи: когда вы указываете две переменные на один и тот же массив, они обе указывают на одни и те же базовые данные. А само полное копирование происходит только в момент мутации.

Таким образом, откладывая операцию копирования до тех пор, пока она действительно не понадобится, Swift может гарантировать, что работа не будет выполнена впустую.


3.1.2.3 Heap Theme | Back To iOSWiki Contents | 3.1.3 Reference Theme Folder