Встроенный C++: использовать исключения или нет?

Я понимаю, что это может быть субъективно, так задаст конкретный вопрос, но сначала, фон:

Я всегда был инженером встроенного программного обеспечения, но обычно на Уровне 3 или 2 стека OSI. Я не действительно аппаратный парень. Я обычно всегда делал телекоммуникационные продукты, обычно рука/сотовые телефоны, которая обычно означает что-то как процессор ARM 7.

Теперь я оказываюсь в более универсальном встроенном мире в маленьком запуске, куда я мог бы переместиться в "не так мощные" процессоры (существует субъективный бит) - я не могу предсказать который.

Я читал вполне немного о дебатах об обработке исключений в C++ во встроенных системах и нет никакого ясного ответа. Существует некоторое маленькое беспокойство о мобильности и некоторые о времени выполнения, но это главным образом, кажется, сводится к размеру кода (или я читаю неправильные дебаты?).

Теперь я должен принять решение, использовать ли или предшествовать обработке исключений - для целой компании, навсегда (это входит в некоторый очень базовый s/w).

Это может походить, "какой длины часть строки", но кто-то мог бы ответить, "если Ваша часть строки является 8051, то не. Если, OTOH, это...".

Какой путь я перехожу? Супербезопасный и теряют хорошую функцию или исключительный код и возможно сталкиваются с проблемами позже?

40
задан Ahmad Mageed 9 February 2010 в 01:50
поделиться

4 ответа

Что касается производительности, насколько я понимаю, исключения фактически уменьшают размер и повышают производительность обычных путей выполнения кода, но делают исключительные / пути ошибки дороже. (часто на лот дороже).

Так что, если вас беспокоит только производительность, я бы посоветовал не беспокоиться об этом позже. Если сегодняшний ЦП может с этим справиться, то завтра тоже.

Однако . На мой взгляд, исключения - одна из тех функций, которые требуют от программистов быть умнее все время , чем можно разумно ожидать от программистов. Итак, я говорю - если вы можете держаться подальше от кода, основанного на исключениях. Держись подальше.

Взгляните на Раймонда Чена «Чистильщик», более элегантный и трудный для распознавания . Он говорит это лучше, чем я мог.

19
ответ дан 27 November 2019 в 01:53
поделиться

Самая большая проблема с исключениями - они не имеют предсказуемого времени выполнения. Таким образом, они не подходят для приложений жесткого реального времени (и я предполагаю, что большинство встроенных приложений не попадают в эту категорию ).

Второе (возможное) увеличение размера двоичного файла.

Я предлагаю вам прочитать Технический отчет о производительности C ++ , в котором конкретно рассматриваются темы, которые вас интересуют: использование C ++ во встроенных (включая системы жесткого реального времени) и то, как обычно реализуется обработка исключений и какие накладные расходы у него есть.

10
ответ дан 27 November 2019 в 01:53
поделиться

Выбор того, использовать исключения или нет, должен на самом деле сводиться к тому, будут ли они хорошо вписываться в проблемный домен вашей программы или нет.

Я широко использовал исключения на Си++, как при ретрофите в старый код на Си, так и в какой-то более новый. (HINT: Не пытайтесь переделать 20-летний код на Си, который был написан в окружении с низким объемом памяти со всеми видами несовместимых исключений. Это просто кошмар).

Если ваша проблема - это проблема, которая поддается обработке всех ошибок в одном месте (скажем, на каком-нибудь TCP/IP сервере, где каждое условие ошибки удовлетворяется с помощью 'break down the connection and try again'), то исключения - это хорошо - вы можете просто бросить исключение куда угодно, и вы знаете, где и как оно будет обработано.

Если, с другой стороны, ваша проблема не поддается централизованной обработке ошибок, то исключения - это РОЯЛЬНАЯ боль, потому что попытка выяснить, где что-то обрабатывается (или должно обрабатываться) может легко превратиться в сизифовскую задачу. И очень трудно увидеть проблему, просто взглянув на код. Вместо этого вам приходится смотреть на деревья вызова данной функции и видеть, где заканчиваются исключения этой функции, чтобы выяснить, есть ли у вас проблема.

9
ответ дан 27 November 2019 в 01:53
поделиться

Я бы сказал, что следует использовать исключения соответствующим образом, если среда выполнения поддерживает их. Исключения для работы с чрезвычайными условиями вполне допустимы и могут привести к небольшим накладным расходам в зависимости от реализации. Некоторые среды их не поддерживают, особенно во встроенном мире. Если вы их запрещаете, будьте осторожны, объясните почему. Однажды у меня был парень, который, когда мне сказали не использовать исключения, вместо этого делал деление на ноль. Не совсем то, что мы имели в виду.

4
ответ дан 27 November 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: