C ++适用于微小的嵌入式目标吗?

时间:2015-11-13 06:49:14

标签: c++ embedded firmware

我们目前正在重新设计我们的嵌入式软件,并且正在从8位到32位Cortex-M微控制器。内存非常有限(128 kByte Flash和32 kByte RAM)。 在another thread中,建议使用嵌入式软件库(www.redblocks.de)。它似乎很好地满足了我的需求,但需要使用C ++。 有没有人像我们这样在嵌入式平台上有C ++经验?我想知道与C相比,我正在处理什么样的开销。

2 个答案:

答案 0 :(得分:6)

根据您使用的C ++功能,与C.相比,几乎没有开销。

以下是一些比较的功能:

  • 使用没有虚方法的类会产生相同的二进制代码 因为C函数处理作为一个传递的数据结构 指针
  • 当使用具有虚方法的类时,会将vptr添加到对象的数据部分,并在文本内存段中引入vtable。类似的功能可以在C中用函数指针实现(也占用内存)。只要在类中有多个虚方法,在使用C ++时通常会得到更高效的二进制代码,而不是使用C为每个对象手动引入多个函数指针。
  • 异常处理的效率因编译器而异。
  • RTTI增加了开销,不应在微小的嵌入式目标上使用。
  • 在没有虚拟内存管理的平台上,两种编程语言都应避免使用非确定性动态内存使用(C中的malloc / free和C ++中的new / delete)。
  • 模板与C预处理器宏有很多共同之处,因为它们在编译期间被评估,并且是一种编译时源代码生成。因此,它们不会增加任何运行时开销。但是,非故意使用它们会导致代码膨胀。如果在正确的位置使用,它们甚至可以帮助减少运行时开销。

我认为最具挑战性的问题是开发人员的知识。 C ++,特别是在使用模板时,是一种比C语言更复杂的语言。所以你需要一群相当不错的开发人员。

但是,如果你想要一个干净和可重用的面向对象设计,C ++肯定是比C更好的选择。

答案 1 :(得分:2)

我自己不是嵌入式开发人员,但我有几位同事在你所针对的微控制器上使用c ++。

语言本身并没有增加很多开销,但如果你的Flash / RAM有限,不推荐使用标准库(容器,算法......)。

如果表演是一个问题,您可能还想避免RTTI和例外。

有关this paperthis page的更多信息。

书籍Effective C++ in an Embedded Environment表格Scott Meyers也是一个非常好的信息来源。