Я знаю, что в Интернете должно быть достаточно документации по этой теме.Но проводить исследования часами без правильного ответа довольно сложно.Поэтому я предполагаю, что не могу сформулировать свой вопрос в хорошей фразе.Итак, полная версия:
Я делаю презентацию о try-catch, но довольно скучно делать основные вещи.Я знаю, что такое try catch, и знаю, как это работает.Но тут приходит волшебство: допустим, я использую C ++.
Компилятор создаст список «только для чтения» в куче со структурами, которые предоставляют информацию о функциях в блоке try.Это включает в себя указатели на начало и конец процедуры, информацию о типе объекта исключения и так далее.(Пожалуйста, поправьте меня, если я ошибаюсь)
Хорошо.Теперь происходит исключение.Так называемый обработчик ошибок (в данном случае, кто такой обработчик ошибок?) Будет искать все данные об отказавшей подпрограмме и получать соответствующую подпрограмму перехвата.Правильный улов определяется путем сравнения объекта исключения, сгенерированного в результате ошибки, с объектами исключения в улове.
Например: InvalidCastException (или что-то в этом роде) создано.Для этого есть ловушка, ошибка обрабатывается, и все объекты, созданные в блоке try, уничтожаются.
Но: Как программа может заметить, что существует исключение?Это обрабатывается программой, средой выполнения или, может быть, даже процессором (я читал кое-что о Ring0 и Ring1, разных уровнях в CPU oO).