|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.04.2011, 14:36 | #1 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Стек и исключения
Что происходит с данными в стеке при возникновении исключения. Я имею в виду вот что. При вызове процедуры значения некоторых (используемых) регистров записываются в стек. Перед ret данные из стека вновь заносятся в регистре. Но если вызвать исключение (raise), то дело до POP не дойдет. А если в вызывающей подпрограмме вызов происходил внутри структуры try...except, то значения регистров как-бы можно использовать дальше. Но там ведь будут "левые" значения.
Или я что-то вообще не догоняю? P.S.: Delphi 7 |
19.04.2011, 21:47 | #2 |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
компилятор генерирует такой код, что в момент входа в exсept-блок содержимое регистров общего назначения, каким бы оно ни было, абсолютно неважно и не играет никакой роли.
|
20.04.2011, 05:46 | #3 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Ага, понял. Спасибо.
Тогда если кодишь на basm, то лучше с try...except не связываться? |
20.04.2011, 10:39 | #4 |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Обработка исключений обязана быть предусмотрена в любом случае.
И BASM здесь ни причем. |
20.04.2011, 14:24 | #5 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Да я имел в виду типа того
Код:
Если есть try...except, то с basm лучше не связываться? Хотя впринципе теперь и сам понимаю, что вопрос был излишним. Во-первых, скорость. Во-вторых, try...except обычно в основную вызывающую процедуру ставится, ну например, что-бы известить пользователя, что что-то не так. И basm там совсем не нужет (в 99,999999999999% случаях). Последний раз редактировалось Sibedir; 20.04.2011 в 14:29. |
20.04.2011, 15:08 | #6 |
Форумчанин
Регистрация: 06.12.2010
Сообщений: 300
|
Добавьте сюда и то, что в готовящейся 64-битной версии компилятора на асемблере можно писать только всю процедуру целиком. Смешанный код там не поддерживается.
|
20.04.2011, 15:34 | #7 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Более того, это не должно вас волновать, поскольку код анализа возвращаемого функцией значения тоже не будет выполнен - ведь возникло исключение и управление получит обработчик в finally или except: а он никакого отношения к функции не имеет. Так что осмысленное там значение или нет - должно быть пофиг.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
20.04.2011, 20:28 | #8 | ||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Ну примерно вот так я думал:
Код:
Покурил малость asm-код, который создает delphi при try. Чёт стало понятнее. Там действительно Цитата:
Цитата:
Последний раз редактировалось Sibedir; 20.04.2011 в 20:41. |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Исключения в Qt | iukash | Qt и кроссплатформенное программирование С/С++ | 6 | 16.04.2011 18:54 |
Исключения C++ | Impuls1989 | Помощь студентам | 2 | 04.03.2011 00:51 |
Исключения в Visual C++ | _Mixer_ | Visual C++ | 10 | 19.01.2011 23:12 |
Исключения | yurik1982 | Фриланс | 9 | 16.02.2010 00:34 |
Исключения | Rifler | Общие вопросы Delphi | 5 | 12.11.2008 00:29 |