Стек и куча (heap) — как устроены?
Стек
Область памяти потока с автоматическим выделением по принципу LIFO: при вызове функции её фрейм (локальные переменные, адрес возврата) кладётся сверху, при возврате снимается. Выделение — просто сдвиг указателя стека.
- очень быстро, без синхронизации — у каждого потока свой стек;
- размер фрейма известен на этапе компиляции;
- ограничен: 1 МБ у главного потока на iOS, 512 КБ у фоновых
Thread/GCD-потоков по умолчанию; глубокая рекурсия → stack overflow; - время жизни строго привязано к области видимости.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep