Я не могу говорить о D или любом из его компиляторов, но я могу рассказать вам немного о C ++, Windows и компиляторе Visual Studio.Это может помочь вам приблизительно понять, как работает D.
Во-первых, обработка исключений на 32- и 64-разрядных компьютерах отличается.ABI x86 (пролог / эпилог, разматывание, соглашение о вызовах) более слаб, поэтому компилятор и сама программа должны выполнять больше работы.ABI x86-64 более строгий, и операционная система играет большую роль, облегчая работу самой программы с исключениями.Если вы используете D в Windows, то он, вероятно, использует SEH (структурированная обработка исключений), как в C ++.
Опять же, все мои ответы ниже относятся к Windows, C ++ и VisualStudio.
Что если я не напишу код обработки исключений?
x86 / x86-64: этот метод не оплачивается.
Что делать, если я делаю, но исключения никогда не генерируются?
x86: Существует плата, даже если исключения не выбрасываются.Информация об обработке исключений помещается в TIB (блок с информацией о потоках), такой как начальная область и обработчик исключений для конкретной функции.Чтобы узнать, какие объекты нужно разрушить и какие обработчики искать, поддерживается переменная области видимости.Эта переменная области действия обновляется при вводе блоков try
и создании объектов стека с деструкторами.
x86-64: из-за более строгих правил нет дополнительного кода (или очень очень минимального).Это большое преимущество перед x86.
Что, если я это сделаю, и будет выдано исключение?
На x86 или x86-64 определенно произойдет хит, Исключения должны быть исключительными, хотя .Не используйте их для регулярного контроля потока.Используйте их только для сигнализации действительно исключительных, неожиданных событий.По сути, вам никогда не придется беспокоиться о стоимости исключений.Даже если бы они заняли 2 секунды, вас это не должно волновать, потому что они должны происходить только тогда, когда все идет на юг.
С учетом вышесказанного, генерировать исключения на x86-64 дороже, чем на x86.Архитектура x86-64 оптимизирована во всех случаях, когда исключений не возникает, что в идеале почти всегда.
Общая картина:
- Я могу 'Я не вижу, чтобы распространение кодов ошибок было значительно быстрее обработки исключений, особенно на платформах x64.
- Я сомневаюсь, что вы когда-либо столкнетесь с проблемой обработки исключений, если только вы не злоупотребляете исключениями.Вы не уверены, вы должны измерить производительность вашего кода.