Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是C++;适合微小的嵌入式目标?_C++_Embedded_Firmware - Fatal编程技术网

C++ 是C++;适合微小的嵌入式目标?

C++ 是C++;适合微小的嵌入式目标?,c++,embedded,firmware,C++,Embedded,Firmware,我们目前正在重新设计我们的嵌入式软件,从8位Cortex-M微控制器发展到32位Cortex-M微控制器。内存非常有限(128 KB闪存和32 KB RAM)。 在嵌入式软件库中,建议使用()。它似乎很好地满足了我的需要,但是需要使用C++。 有没有像我们这样的嵌入式平台上的C++经验?我想知道我处理的开销是什么,与C.< P>相比,我自己不是一个嵌入式开发人员,但是我有几个同事使用C++来处理你正在瞄准的微控制器。 该语言本身不会增加很多开销,但如果您在Flash/RAM方面受到限制,则不建议

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

< P>相比,我自己不是一个嵌入式开发人员,但是我有几个同事使用C++来处理你正在瞄准的微控制器。 该语言本身不会增加很多开销,但如果您在Flash/RAM方面受到限制,则不建议使用标准库(容器、算法…)

如果性能是一个问题,您可能还希望避免RTTI和异常

关于或的更多信息


< Scott Meyers书也是一个很好的信息来源。

根据你使用的C++特性,与C.</P>相比,几乎没有开销。 以下是比较的一些功能:

  • 使用没有虚拟方法的类会产生相同的二进制代码 as C函数处理作为 指针
  • 使用带有虚拟方法的类时,会将一个vptr添加到对象的数据部分,并在文本内存段中引入一个vtable。类似的功能可以在C中通过函数指针(也占用内存)实现。在一个类中,一旦有多个虚拟方法,通常使用C++时,可以使用更高效的二进制代码,而不是用C.
  • 手动地为每个对象手动引入多个函数指针。
  • 异常处理的效率因编译器而异
  • RTTI增加了开销,不应用于微小的嵌入式目标
  • 在没有虚拟内存管理的平台上,两种编程语言都应该避免使用不确定的动态内存(C中的malloc/free和C++中的new/delete)
  • 模板与C预处理器宏有很多共同之处,因为它们是在编译时计算的,并且是编译时源代码生成的一种。因此,它们不会增加任何运行时开销。但是,非故意使用它们会导致代码膨胀。如果在正确的位置使用,它们甚至可以帮助减少运行时开销
我认为最具挑战性的问题是开发人员的知识。特别是当使用模板时,C++是一种比C语言更复杂的语言,所以你需要一组相当不错的开发人员。p>

然而,如果你想要一个干净的和可重用的面向对象的设计,C++当然比C.</P>更好的选择,不幸的是,这似乎太宽泛,而且对于这个站点来说是基于意见的。你可能想用一个更窄的问题来编辑这个问题(或者问一个新问题),或者你面临的或预期的任何特定问题。到目前为止,我已经在C++中对所有基于皮质的MCS进行编程,没有遇到任何问题。但是,根据您管理堆的方式,您可能无法使用STL容器或至少需要自己的分配器。感谢您的出色响应。Reinhard:是的,这是一个很好的答案。您应该单击此答案旁边的复选标记,将其选择为可接受的答案,以帮助@Mats提高其声誉分数。