Плохие реализации обработчиков исключений выдвигают какой-то блок обработчиков исключений для каждого предложения try в стеке времени выполнения при вводе предложения try и извлекают его при выходе из предложения try. Местоположение, содержащее адрес самого последнего отправленного блока обработчика исключений, также сохраняется. Как правило, эти обработчики исключений связаны между собой, поэтому их можно найти по ссылкам с самых последних версий. Когда возникает исключение, обнаруживается указатель на последний обработанный блок обработчика EH, и проверяется обработка случаев EH этого предложения try. Попадание в дело EH приводит к тому, что очистка стека происходит обратно в точку выдвинутого EH, и управление переходит в дело EH. Отсутствие попаданий в EH приводит к обнаружению следующего EH, и процесс повторяется. 32-битная схема SEH для Windows является версией этого.
Это плохая реализация, потому что программа платит цену выполнения за каждое предложение try (push затем pop), даже когда исключение не происходит.
Хорошие реализации просто записывают таблицу диапазонов, в которых встречаются предложения try. Это означает, что на вход / выход из предложения try накладных расходов нет. (Мой PARLANSE язык программирования Parallell использует эту технику). Исключение ищет ПК точки исключения в таблице и передает управление EH, выбранному таблицей. Код EH сбрасывает стек соответствующим образом. Быстро и красиво.
Я думаю, что Windows 64-битный EH относится к этому типу, но я не посмотрел внимательно.