Когда возникает исключение , возникают временные издержки, которые зависят от того, как вы реализуете обработку исключений. Но, будучи неподтвержденным, серьезность события, которое должно вызвать исключение, займет столько же времени для обработки с использованием любого другого метода. Почему бы не использовать широко поддерживаемый языковой метод решения таких проблем?
Компилятор GNU C ++ по умолчанию использует модель с нулевой стоимостью, т. Е. Нет никаких временных затрат, когда исключения не возникают.
Поскольку информация о коде обработки исключений и смещениях локальных объектов может быть вычислена один раз во время компиляции, такая информация может храниться в одном месте, связанном с каждой функцией, но не в каждом ARI. Вы по существу удаляете издержки исключений из каждого ARI и таким образом избегаете дополнительного времени, чтобы поместить их в стек. Этот подход называется моделью обработки исключений с нулевой стоимостью, а оптимизированное хранилище, упомянутое ранее, называется теневым стеком. - Брюс Экель, Мышление на С ++, Том 2
Затраты на сложность размера не поддаются количественной оценке, но Экель утверждает, что в среднем они составляют 5 и 15 процентов. Это будет зависеть от размера вашего кода обработки исключений в зависимости от размера кода вашего приложения. Если ваша программа небольшая, исключения будут большой частью двоичного файла. Если вы используете модель с нулевой стоимостью, то исключения будут занимать больше места для устранения временных затрат, поэтому, если вы заботитесь о пространстве, а не о времени, не используйте компиляцию с нулевой стоимостью.
Мое мнение заключается в том, что большинство встроенных систем имеют достаточно памяти, если у вашей системы есть компилятор C ++, у вас достаточно места для включения исключений. Компьютер PC / 104, который использует мой проект, имеет несколько ГБ вторичной памяти, 512 МБ основной памяти, следовательно, нет проблем с пространством для исключений - хотя наши микроконтроллеры запрограммированы на C. Моя эвристика - «если есть основной компилятор C ++ это, используйте исключения, в противном случае используйте C ".