Я не могу найти достаточно информации, чтобы решить, какой компилятор мне использовать для компиляции моего проекта. На разных компьютерах есть несколько программ, имитирующих процесс. В Linux я использую GCC. Все отлично. Я могу оптимизировать код, он быстро компилируется и использует не так много памяти.
Я делаю свой собственный тест с компиляторами MSVC и GCC. Позже получается несколько более быстрых двоичных файлов (для каждой субархитектуры). Хотя время компиляции намного больше, чем MSVC.
Поэтому я решил использовать MinGW. Но не могу найти объяснения по поводу методов обработки исключений и их реализации в MinGW. Я могу использовать разные дистрибутивы для разных операционных систем и архитектур.
Соображения:
Там краткий обзор MinGW-w64 Wiki:
Почему mingw-w64 gcc не поддерживает обработку исключений Dwarf-2?
Гном-2 EH реализация для Windows не предназначена для
работать под 64-битными приложениями Windows. В режиме win32 исключение
обработчик unwind не может распространяться через код, не поддерживающий dw2, это означает
что любое исключение, проходящее через любой код «чужих кадров», не поддерживающий dw2, завершится сбоем, включая системные библиотеки Windows и библиотеки DLL, созданные с
Visual Studio. Код раскрутки Dwarf-2 в gcc проверяет x86
разматывает сборку и не может продолжить без другого дварфа-2
раскрутить информацию.SetJump LongJump метод обработки исключений работает для большинства
случаи как на win32, так и на win64, за исключением общих ошибок защиты.
Поддержка структурированной обработки исключений в gcc разрабатывается для
преодолеть слабости dw2 и sjlj. На win64
unwind-информация помещается в xdata-section и там есть .pdata
(таблица дескрипторов функций) вместо стека. Для win32 цепочка
обработчики находятся в стеке и должны быть сохранены / восстановлены реальным
исполняемый код
GCC GNU около Обработка исключений:
GCC поддерживает два метода обработки исключений (EH):
- DWARF-2 (DW2) EH, которая требует использования отладочной информации DWARF-2 (или DWARF-3). DW-2 EH может привести к тому, что исполняемые файлы будут
слегка раздутый, потому что большие таблицы раскрутки стека вызовов должны быть
включены в й исполняемые файлы.- Метод, основанный на setjmp / longjmp (SJLJ). EH на основе SJLJ намного медленнее, чем EH DW2 (штрафует даже на нормальное выполнение, когда нет
исключения), но может работать с кодом, который не был
скомпилирован с GCC или не имеет раскрутки стека вызовов
Информация.[…]
Структурированная обработка исключений (SEH)
В Windows используется собственный механизм обработки исключений, известный как структурированная обработка исключений (SEH). […]
К сожалению, GCC пока не поддерживает SEH. […]
Смотрите также:
SJLJ (setjmp / longjmp): — доступно для 32-битных и 64-битных — не «с нулевой стоимостью»: даже если исключение не выдается, оно имеет незначительный
снижение производительности (~ 15% в коде исключения) — допускаются исключения
например, пройти через обратные вызовы WindowsDWARF (DW2, dwarf-2) — доступно только для 32-разрядных систем — без постоянных накладных расходов времени выполнения — для поддержки дварфа необходим весь стек вызовов, что
означает, что исключения не могут быть выброшены, например, Системные библиотеки Windows.SEH (исключение нулевых издержек) — будет доступно для 64-битного GCC 4.8.
источник: http://qt-project.org/wiki/MinGW-64-bit