@LanskoyGames
У модераторов первое место, но только с конца...

Try/catch и goto?

Для выхода из вложенных циклов при try/catch в случае исключения произойдёт свертка стека, но будет ли тоже самое для goto и нужно ли оно(свертка стека)?
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Для выхода из вложенных циклов при try/catch в случае исключения произойдёт свертка стека

stack unwinding или развёртка стека происходит при выходе из одного или более вложенных вызовов, т.е. когда текущим должен стать более ранний кадр стека. При выходе из вложенных циклов в пределах одной функции кадр стека не меняется, но по правилам языка автоматические переменные из покинутых блоков должны быть уничтожены. Компилятор генерирует для этого код вызова деструкторов и вставляет его вызовы на пути выхода из блоков. В случае stack unwinding компилятор генерирует код вызова деструкторов, но вызов этого кода происходит более сложным путём. О том, как делается stack unwinding в gcc почитать можно здесь, о том как в этот процесс встраивается вызов деструкторов -- здесь.

будет ли тоже самое для goto?

То же самое будет и для goto.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы