c++ - C++ 适合微小的嵌入式目标吗?

标签 c++ embedded firmware

<分区>

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

最佳答案

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

以下是比较的一些功能:

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

我认为最具挑战性的问题是开发人员的知识。 C++,尤其是在大量使用模板时,是一种比 C 复杂得多的语言。所以你需要一群非常优秀的开发人员。

但是,如果您想要一个干净且可重用的面向对象设计,C++ 无疑是比 C 更好的选择。

关于c++ - C++ 适合微小的嵌入式目标吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33687285/

相关文章:

c++ - 我有一个在 linux 上运行的 c++ 程序,是否可以让它定期将状态快照存储在共享内存中以用于崩溃后恢复?

c++ - UINT_MIN 的可移植值是多少?

c - C 中与网络相关的低级软件的读物、工具和库

android - 在 android 环境中,人们所说的 ROM 和固件是什么意思?

linux - OSX 中的环回挂载

c++ - 为什么要使用指针而不是对象本身?

c++ - 双重和准确性

c - 一种适合在嵌入式系统上实现的简单可靠的P2P通信方法

embedded - 为什么在尝试使用 openocd 连接 STLink-v2 时出现通信失败

c - 多线程嵌入式软件中的原子操作