Hardexceptionsperformance
Какова стоимость исключений (cost of exceptions)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
В современной модели (zero-cost) try/catch почти бесплатны в нормальном потоке. throw дорог — микросекунды на unwinding + аллокация объекта исключения.
// ПЛОХО: исключение в горячем цикле
for (int i = 0; i < 1'000'000; ++i) {
try { if (rare) throw X(); } // даже редкий throw замедлит
catch (X&) { /* ... */ }
}
// ЛУЧШЕ: код возврата для частых «ошибок»
for (int i = 0; i < 1'000'000; ++i) {
if (!tryParse(line)) continue; // без overhead
}Исключения — для редких ошибок (частота < 5%). На embedded/realtime их отключают (-fno-exceptions). noexcept даёт компилятору больше оптимизаций.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.