Mediumperformance
Чем stack allocation быстрее heap?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Стек: аллокация = вычитание из указателя стека (одна инструкция), освобождение = сложение при выходе из функции. Никакого поиска блока, метаданных, отличная локальность. Куча: malloc/new ищет свободный блок (freelists/buddy), обновляет метаданные, при фрагментации обращается к ОС.
void fast() {
int buf[1000]; // стек: наносекунды
// ...
} // освобождение = сдвиг указателя
void slow() {
int* buf = new int[1000]; // куча: микросекунды (malloc + metadata)
delete[] buf; // слияние блоков
}В hot paths предпочитают стек (значения вместо указателей, SSO в string), а в heap — только долгоживущее или большое по размеру. GC-языки ещё медленнее из-за пауз.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.