исключения
May. 4th, 2012 11:30 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Чего-то в зиване никакой активности, еще здесь спрошу:
Кто-нибудь разбирался, как именно в C++ исключения работают? Для конкретного случая GCC? А то я тут полез смотреть в дизассемблированный код, и это просто какая-то загадка природы: вот лежит код из try, в нем никаких дополнительных проверок. Вот лежит код из catch, в нем видно ветвление по типу исключения. Но между ними - никакой связи. Они просто лежат рядом. Как оно его находит? Чтоб сначала выполнить деструкторы из try, а потом перейти в catch? Ну, деструкторы вроде присутствуют в двух копиях, так что может там есть специальный вариант для поимки исключений. Но как оно эти нужные куски находит? Вроде нигде в основном коде нет никаких ссылок на них.
И, кстати, где нынче умное место для таких вопросов? Реддит?
Кто-нибудь разбирался, как именно в C++ исключения работают? Для конкретного случая GCC? А то я тут полез смотреть в дизассемблированный код, и это просто какая-то загадка природы: вот лежит код из try, в нем никаких дополнительных проверок. Вот лежит код из catch, в нем видно ветвление по типу исключения. Но между ними - никакой связи. Они просто лежат рядом. Как оно его находит? Чтоб сначала выполнить деструкторы из try, а потом перейти в catch? Ну, деструкторы вроде присутствуют в двух копиях, так что может там есть специальный вариант для поимки исключений. Но как оно эти нужные куски находит? Вроде нигде в основном коде нет никаких ссылок на них.
И, кстати, где нынче умное место для таких вопросов? Реддит?