嵌入式开发应该避免哪些c ++特性

时间:2010-07-18 06:36:48

标签: c++ embedded

我有兴趣编译一个不适合在嵌入式系统中使用的c ++功能列表(这可能会导致人们推荐c over c ++)。如果您知道,请尝试添加原因,或将其原因添加到其他人的答案中。

这是一个开始(我知道的唯一一个)

  • 动态多态,不知道为什么,但有人说这是“昂贵的”

4 个答案:

答案 0 :(得分:9)

此处的联合攻击战斗机编码标准:http://www2.research.att.com/~bs/JSF-AV-rules.pdf非常好地概述了如何将C ++用于嵌入式编程。

动态多态性的禁令是90年代的延续,并没有合理的依据。调用虚拟功能不再需要进行切换和呼叫。如果要避免虚函数调用,也可以使用C。

答案 1 :(得分:4)

某些功能需要运行时支持,因此如果您错过了所需的支持,则应避免使用这些功能。特别是,以下功能通常需要额外的运行时支持:

  • 例外
  • RTTI
  • 动态内存分配
  • 虚拟继承(对此不太确定)

人们通常也会提到模板,但它们只是一个高级宏工具 - 因此您可以在嵌入式系统中自由使用它们。不过,你可能想要避免使用它们,因为它们会在编译后导致代码膨胀。

您的嵌入式系统应附带文档,说明对C ++(以及其他方式)的运行时支持是否可用。

答案 2 :(得分:3)

您应根据设备选择功能。它可能对某些功能是明智的,也可能不是。这取决于它的架构。例如,Google为Android平台提供了缩减版的C ++编译器。简单的通用规则是避免导致繁重的运行时代码的构造。

答案 3 :(得分:2)

  1. 过多的模板使用。具有不同参数的多个模板实例化将导致对象代码中相同函数的多个副本,从而增加其大小,除非您的编译器足够智能以折叠相同的代码(例如,如果模板依赖于类型T,则实例化intlong在大多数情况下与dynamic_cast)的实例化完全相同 一种避免使用模板增加代码大小的方法,您可以编写代码的不安全核心版本,并使用薄型安全模板包装器。
  2. {{1}}可能在CPU方面非常昂贵,因为它需要扫描类层次结构并对类名进行字符串比较[需要引证]。