Каких функций C++ нужно избежать для встроенной разработки

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

Вот один для запуска (единственный, который я знаю),

  • Динамический полиморфизм, не знайте, почему, но кто-то сказал, что это является "дорогостоящим"
5
задан cooper 18 July 2010 в 06:45
поделиться

4 ответа

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

  • исключения
  • RTTI
  • распределение динамической памяти
  • виртуальное наследование (немного не уверены в этом)

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

Ваша встраиваемая система должна поставляться с документацией, в которой указывается, какая поддержка времени выполнения для C ++ (и других) доступна, если таковая имеется.

4
ответ дан 18 December 2019 в 09:04
поделиться

Стандарты кодирования Joint Strike Fighter здесь: http://www2.research.att.com/~bs/JSF-AV-rules.pdf довольно хороши. обзор использования C ++ для встроенного программирования.

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

9
ответ дан 18 December 2019 в 09:04
поделиться

Вы должны выбирать функции в зависимости от вашего устройства. Это может быть разумно для какой-то функции, а может и нет. Это зависит от его архитектуры. Например, у Google есть сокращенная версия компилятора C ++ для платформы Android. Простое общее правило - избегать конструкций, которые приведут к тяжелому коду времени выполнения.

3
ответ дан 18 December 2019 в 09:04
поделиться
  1. Чрезмерное использование шаблона. Создание нескольких экземпляров шаблона с разными параметрами приведет к созданию нескольких копий одних и тех же функций в вашем объектном коде, следовательно, к увеличению его размера, если только ваш компилятор не достаточно умен, чтобы складывать идентичный код (например, если шаблон зависит от типа T , создание экземпляра с помощью int в большинстве случаев будет идентично созданию экземпляра с помощью long ).
    Способ избежать увеличения размера кода с помощью шаблонов, вы можете написать небезопасную базовую версию вашего кода и иметь тонкие типобезопасные оболочки шаблонов.
  2. dynamic_cast может быть довольно затратным с точки зрения ЦП, потому что ему необходимо сканировать иерархию классов и выполнять строковое сравнение имен классов [необходима цитата].
2
ответ дан 18 December 2019 в 09:04
поделиться
Другие вопросы по тегам:

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