C++适合用于微型嵌入式目标吗?

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

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Petr
到目前为止,我已经使用C++编程了所有基于cortex的微控制器,并且没有遇到任何问题。但是,根据您如何管理堆栈,您可能无法使用STL容器,或者至少需要自己的分配器。 - MikeMB
2个回答

6
根据您使用的C++功能,与C相比几乎没有开销。
以下是一些功能的比较:
- 不使用虚方法的类会产生与在数据结构上工作并传递指针的C函数相同的二进制代码。 - 当使用具有虚方法的类时,vptr将添加到对象的数据部分中,并且在文本内存段中引入vtable。可以使用函数指针(也占用内存)在C中手动引入多个函数指针来实现类似的功能。一旦在一个类中有多个虚方法,使用C ++而不是手动引入每个对象的多个函数指针通常会产生更有效的二进制代码。 - 异常处理的效率因编译器而异。 - RTTI会增加开销,不应在微小的嵌入式目标上使用。 - 应避免在没有虚拟内存管理的平台上使用非确定性动态内存使用(C中的malloc / free和C ++中的new / delete)。 - 模板与C预处理器宏有很多共同点,因为它们在编译时进行评估并且是一种编译时源代码生成。因此,它们不会增加任何运行时开销。但是,非故意使用它们将导致膨胀的代码。如果在正确的位置使用它们,甚至可以帮助减少运行时开销。
我认为最具挑战性的问题是开发人员的知识。特别是在大量使用模板时,C ++比C更复杂。因此,您需要一群非常优秀的开发人员。
但是,如果您想要一个干净且可重用的面向对象设计,则C ++肯定比C更好。

感谢您的出色回答。 - Reinhard Schneider
Reinhard:是的,这是一个很好的答案。你应该点击旁边的勾选标志以选择它作为被接受的答案,帮助@Mats提高他的声望分数。 - sifferman

2

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

C++语言本身并没有增加太多额外的开销,但如果Flash/RAM有限,不建议使用标准库(容器、算法...)。

如果性能成为问题,您可能还需要避免RTTI和异常。

更多信息请参见这篇论文这个页面

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接