Составители:
Рубрика:
В Visual C++ реализован кадровый механизм обработки исключений [2].
Это означает, что каждый блок catch связан через стек с процедурой,
в которой он содержится. Термин кадр обозначает блок программного стека.
Каждый раз, когда программа вызывает процедуру, она записывает в стек но-
вый набор информации. Эта информация включает, в частности, параметры,
переданные новой процедуре, а также адрес точки, в которую необходимо
вернуть управление по завершении процедуры. Если вторая процедура вызы-
вает третью, а третья – четвертую и т. д., то при каждом последующем вызове
в стек записывается новая информация (рис. 8.1).
Каждый кадр представляет вызванную процедуру, которая, прежде чем
возобновить свое выполнение, ожидает выполнения вложенных подпрограмм.
В любой момент с помощью стека можно проследить, в какой последователь-
ности происходил вызов процедур. При генерации исключения система после-
довательно возвращается назад и ищет обработчики исключений во всех при-
остановленных процедурах.
Рис. 8.1. Кадры в стеке программы
Встроенный механизм обработки исключений изменяется в зависимости
от конкретной системы. Например, MIPS-компьютеры реализуют обработчики
исключений посредством специальной таблицы, а не стека.
При порождении исключения система прежде всего сохраняет аппарат-
ный контекст прерванного потока, подобно тому, как это делается при пере-
ключении контекста для реализации обычной многозадачности. В зависимости
от того, каким образом производится окончательная обработка исключения,
система впоследствии может использовать записанный контекст или возобно-
вить выполнение программы с той строки, которая породила исключение.
В ответ на исключение система обычно пытается сначала запустить
111
В Visual C++ реализован кадровый механизм обработки исключений [2].
Это означает, что каждый блок catch связан через стек с процедурой,
в которой он содержится. Термин кадр обозначает блок программного стека.
Каждый раз, когда программа вызывает процедуру, она записывает в стек но-
вый набор информации. Эта информация включает, в частности, параметры,
переданные новой процедуре, а также адрес точки, в которую необходимо
вернуть управление по завершении процедуры. Если вторая процедура вызы-
вает третью, а третья – четвертую и т. д., то при каждом последующем вызове
в стек записывается новая информация (рис. 8.1).
Каждый кадр представляет вызванную процедуру, которая, прежде чем
возобновить свое выполнение, ожидает выполнения вложенных подпрограмм.
В любой момент с помощью стека можно проследить, в какой последователь-
ности происходил вызов процедур. При генерации исключения система после-
довательно возвращается назад и ищет обработчики исключений во всех при-
остановленных процедурах.
Рис. 8.1. Кадры в стеке программы
Встроенный механизм обработки исключений изменяется в зависимости
от конкретной системы. Например, MIPS-компьютеры реализуют обработчики
исключений посредством специальной таблицы, а не стека.
При порождении исключения система прежде всего сохраняет аппарат-
ный контекст прерванного потока, подобно тому, как это делается при пере-
ключении контекста для реализации обычной многозадачности. В зависимости
от того, каким образом производится окончательная обработка исключения,
система впоследствии может использовать записанный контекст или возобно-
вить выполнение программы с той строки, которая породила исключение.
В ответ на исключение система обычно пытается сначала запустить
111
Страницы
- « первая
- ‹ предыдущая
- …
- 109
- 110
- 111
- 112
- 113
- …
- следующая ›
- последняя »
