LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Также исключения увеличивают производительность кода.

Вроде же нет (на раскрутку стека тратится много ресурсов), но если код не кидает на всё по исключению, то оверхед не выбивается из погрешности.

На автоматическую раскрутку стека будет тратиться уж точно не больше ресурсов, чем их будет тратиться при ручной раскрутке, т.к. она никуда не денется, как бы ты ошибки не обрабатывал - неизбежно обработчик будет где-то выше по стеку и к нему нужно стек будет раскрутить.

Разница только в том, что в случае с исключениями есть возможность держать второй стек, в котором будут только функции с обработчиками исключений и блоки finally или подобные. И прыгать сразу по этим блокам, а не по каждой функции.

Проблема C++ в том, что там нет GC, поэтому в очень многих функциях будет блок финализатора, где будут отрабатывать деструкторы локальных переменных. Поэтому там при раскрутке стека кода будет работать больше, хотя и не больше, чем при ручной обработке исключения. Но в Go такой проблемы нет, в 90% функций никакого финализатора не будет, поэтому там исключения бы работали быстро.

Исходная версия vbr, :

Также исключения увеличивают производительность кода.

Вроде же нет (на раскрутку стека тратится много ресурсов), но если код не кидает на всё по исключению, то оверхед не выбивается из погрешности.

На автоматическую раскрутку стека будет тратиться уж точно не больше ресурсов, чем их будет тратиться при ручной раскрутке, т.к. она никуда не денется, как бы ты ошибки не обрабатывал - неизбежно обработчик будет где-то выше по стеку и к нему нужно стек будет раскрутить.

Разница только в том, что в случае с исключениями есть возможность держать второй стек, в котором будут только функции с обработчиками исключений и блоки finally или подобные. И прыгать сразу по этим блокам, а не по каждой функции.