Ответ 1
Вот краткий обзор на MinGW-w64 Wiki:
Почему mingw-w64 gcc поддерживает обработку исключений Dwarf-2?
Реализация Dwarf-2 EH для Windows не предназначена вообще для работают под 64-разрядными приложениями Windows. В режиме win32 исключение разматывающий обработчик не может распространяться через код, не поддерживающий dw2, это означает что любое исключение, проходящее через любые "внешние кадры", отличные от dw2, код не будет работать, включая системные DLL файлы Windows и библиотеки DLL, созданные с помощью Visual Studio. Код размотки гномов-2 в gcc проверяет x86 разматывать сборку и не может действовать без других карликов-2 раскрутите информацию.
Метод обработки SetJump LongJump для обработки исключений работает для большинства случаев как на win32, так и на win64, за исключением общих ошибок защиты. Поддержка структурированной обработки исключений в gcc разрабатывается для преодолеть слабые стороны dw2 и sjlj. На win64, unind-информация помещается в раздел xdata и есть .pdata(таблица дескрипторов функций) вместо стека. Для win32 цепочка обработчиков находятся в стеке и должны быть сохранены/восстановлены реальными выполненный код.
GCC GNU об обработке исключений:
GCC поддерживает два метода обработки исключений (EH):
- DWARF-2 (DW2) EH, для чего требуется использование отладочной информации DWARF-2 (или DWARF-3). DW-2 EH может привести к тому, что исполняемые файлы будут слегка раздуты, потому что столы для разворота больших вызовов должны быть включены в исполняемые файлы.
- Метод, основанный на setjmp/longjmp (SJLJ). SJLJ-EH намного медленнее, чем DW2 EH (штрафует даже нормальное выполнение, когда нет исключения), но может работать через код, который не был скомпилированный с помощью GCC или который не имеет раскручивания вызовов информация.
[...]
Обработка структурированных исключений (SEH)
Windows использует свой собственный механизм обработки исключений, известный как Structured Exception Handling (SEH). [...] К сожалению, GCC пока не поддерживает SEH. [...]
См. также: