Выбор ответа Senior Исключения обновлено

Сколько стоят исключения

Вопрос

Что верно про стоимость исключений в GCC и Clang на x86-64?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Без исключений расходов почти нет, а сам бросок дорогой. Itanium C++ ABI, который используют GCC и Clang, хранит информацию для раскрутки в отдельных таблицах.

Варианты ответа

  1. Каждый блок try замедляет код на проверку флага при входе и выходе
  2. Без исключений расходов почти нет, а сам бросок дорогойправильный ответ
  3. Исключения бесплатны в любом случае, и при броске тоже
  4. Бросок дешевле, чем возврат кода ошибки через все уровни стека

Разбор

Itanium C++ ABI, который используют GCC и Clang, хранит информацию для раскрутки в отдельных таблицах. Пока исключение не брошено, кода проверок нет (косвенная цена: размер бинарника и ограничения оптимизатора). Бросок требует аллокации объекта исключения, поиска обработчика по таблицам и раскрутки, это порядка микросекунд. Поэтому исключения не используют для обычного потока управления.

  • Модель с проверкой флага на каждом try была у старых реализаций (setjmp/longjmp), сейчас нет.
  • Бросок однозначно дороже возврата значения.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме