Исключения - что на самом деле происходит?
Я видел множество статей и вопросов, каждый из которых посвящен стоимости исключений, оценкам производительности и тому подобному.
Но на самом деле ничто не объясняет, почему это так медленно. Что на самом деле происходит под капотом, так что его величины медленнее, когда его бросают. В большинстве статей просто говорится, что раскрутка стека делает его медленным. Но я не понимаю, почему это делает его медленнее.
Из краткого понимания SEH, в основном каждый раз, когда поток входит в блок try, он добавляет, скажем, какой-то маркер к этому месту в свою цепочку исключений в TIB. Это имеет свои затраты при попытке вернуться обратно в стек. Я понимаю эту часть. Но я сомневаюсь, что это даже половина истории, учитывая величину потери производительности. Кроме того, зачем вам даже раскручивать стек, если исключение перехватывается в той же функции. Почему этот случай все еще одинаково медленный?
Может кто-нибудь объяснить, что на самом деле происходит, простыми словами?