Swift не дает никаких гарантий, где хранятся объекты и структуры, за исключением того, что:
- Reference типы имеют постоянное расположение в памяти
- Расположение Value типов может быть изменено по усмотрению компилятора
Оптимизация Value типов выглядит следующим образом:
- При работа с небольшими структурами компилятор может поместить их в регистры и вообще не выделять место в куче. Это касается простых Int и Double, которые гарантированно помещаются в регистры
- Структуры размером более 3 машинных слов (24 байта на 64-битной машине) могут быть аллоцированы в куче.
Это не противоречит поведению Value типов. Их по-прежнему можно произвольно копировать и компилятор хорошо справляется с избеганием ненужных выделений памяти там, где это возможно.
Детально это раскрывается в лекции Understanding Swift Performance
Актуальную реализацию можно посмотреть в SIL файле Swift
#Swift #MemoryLayout
- Reference типы имеют постоянное расположение в памяти
- Расположение Value типов может быть изменено по усмотрению компилятора
Оптимизация Value типов выглядит следующим образом:
- При работа с небольшими структурами компилятор может поместить их в регистры и вообще не выделять место в куче. Это касается простых Int и Double, которые гарантированно помещаются в регистры
- Структуры размером более 3 машинных слов (24 байта на 64-битной машине) могут быть аллоцированы в куче.
Это не противоречит поведению Value типов. Их по-прежнему можно произвольно копировать и компилятор хорошо справляется с избеганием ненужных выделений памяти там, где это возможно.
Детально это раскрывается в лекции Understanding Swift Performance
Актуальную реализацию можно посмотреть в SIL файле Swift
#Swift #MemoryLayout
👍15👎1