Easymemorystack-heap
Чем отличается stack allocation от heap allocation?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Stack: объект создаётся на стеке (локальные переменные), освобождается автоматически при выходе из scope. Очень быстро (сдвиг указателя стека), кэш-дружелюбно, ограниченный размер (1-8 MB на поток). Heap: динамическая аллокация через new/malloc, живёт до явного delete/free.
void f() {
int x = 5; // stack — мгновенно
std::array<int, 100> arr{}; // stack — мгновенно
auto p = std::make_unique<Huge>(); // heap — медленнее
std::vector<int> v(N); // сам объект на стеке, данные на heap
} // x, arr, p, v — разрушаются автоматически- Stack: быстро, автоматически, кэш-дружелюбно, но ограничен; тип и размер известны на compile-time;
- Heap: медленнее (поиск блока, накладные allocator), размер ограничен памятью, для сложного lifetime и полиморфизма.
Stack overflow — переполнение стека (глубокая рекурсия, большие локальные массивы).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.