Кратко про основные различия (этого ответа достаточно на собеседовании): 🟰 Стек работает быстрее, потокобезопасен и имеет фиксированный размер. Управляется ОС. Хранит локальные переменные и аргументы функций. 💩 Память в куче динамически расширяемая и требует ручного управления или участия сборщика мусора. Может хранить глобальные переменные и ссылки (указатели). 🟰 Выделение памяти в стеке последовательно и фиксировано на этапе компиляции, и нельзя изменять размер стека после начала выполнения программы. 💩 Динамическое выделение в куче может привести к фрагментации памяти. А теперь подробно. Стек (Stack) Аллокация памяти, другими словами, ее выделение происходит в стеке вызовов функций. Пространство памяти выделяется блоками. Компилятор знает размер памяти, который нужно выделить. Когда вызывается функция, память для её переменных выделяется в стеке и освобождается после завершения вызова функции. Размер стека вызовов определяется многими факторами. Архитектура компьютера, на котор