Mediumстек
Что такое stack overflow и как его избежать?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Stack overflow — исчерпание стека потока (обычно 1–8 МБ). Причины: глубокая рекурсия, большие локальные объекты, глубокая вложенность вызовов.
// ПЛОХО: бесконечная рекурсия
int bad(int n) { return bad(n + 1); }
// ПЛОХО: огромный массив в стеке
void f() {
int arr[10'000'000]; // ~40 МБ — превысит стек
}
// ХОРОШО: большие объекты в heap
void f() {
auto arr = std::vector<int>(10'000'000);
}Защита: переписать рекурсию в итерации (explicit stack), большие объекты — в heap, при необходимости увеличить размер стека потока.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.