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

Rei*_*der 3 c++ embedded firmware

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

小智 6

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

以下是一些比较的功能:

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

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

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