я правильно понял?
1) Приложение компилируется
Swift => абстракция LLMC => Assembly => Машинный код
2) Перед запуском:
три секции в оперативной памяти:
code section - машинный код со всеми инструкциями
stack - почти пустой, но определен размер во время компиляции
heap - пустая
3) После запуска начинает выполнятся машинный код сверху вниз инструкция за инструкцией
___
все глобальные переменные, шаблоны классов, функции лежат в code section
___
в стеке выполняются только функции -> создается фрейм с размером памяти, определенным на компиляции для локальных переменных или указателей на кучу/машинный код в случае ссылочного типа, также во фрейме лежит указатель куда вернуться после выполнения функции
Переменные в стеке лежат и можно обращаться на изменение любой, так как компилятор знает смещение адреса памяти относительно Stack Pointer (Указателя стека)
—
Опционалы хранятся в куче
Если value-type свойства класса - хранятся в куче
В каждом потоке один стек
__
если одна функция вызывает другую, то вторая кладется в стек поверх стека, и возвращается к первой, когда уйдет из памяти (LIFO)
Куда ты собираешься собеседоваться?
Куда позовут
На джуна?
Опционалы — это enum, они в стеке живут
Я с этого начал https://www.geeksforgeeks.org/memory-layout-of-c-program/
indirect enum имеют ссылочный тип, часто такое на собесах есть
Обсуждают сегодня