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 подскажет развёрнутый ответ в реальном времени.