嵌入式系统中的C++用法

Jef*_*ffV 25 c++ embedded

嵌入式系统应该避免C++的哪些特性?

请按以下原因对答案进行分类:

  • 内存使用情况
  • 代码大小
  • 速度
  • 可移植性

编辑:让我们使用带有64k ram的ARM7TDMI作为目标来控制答案的范围.

Nil*_*nck 19

RTTI和异常处理:

  • 增加代码大小
  • 降低性能
  • 通常可以用更便宜的机制或更好的软件设计来代替.

模板:

  • 如果代码大小是一个问题,请小心它们.如果您的目标CPU没有或只有非常小的指令缓存,它也可能会降低性能.(如果不小心使用,模板往往会膨胀代码).Otoh聪明的元编程也可以减少代码大小.他的答案没有明确的答案.

虚函数和继承:

  • 这些对我来说很好.我在C中编写了几乎所有嵌入式代码.这并没有阻止我使用函数指针表来模仿虚函数.他们从未成为一个性能问题.

  • 声明“模板始终内联”是不正确的。这是错误的。如果您未在函数声明中指定“inline”,则该函数不会被内联。链接器*应该*删除重复的实例化。 (3认同)

Avd*_*vdi 13

选择以避免某些特征应始终行为的定量分析来驱动你的软件,在你的硬件,与选择的工具链,制约下您的域名需要.在C++开发中有很多传统的智慧"不应该",它们基于迷信和古代历史,而不是硬数据.不幸的是,这通常会导致编写大量额外的解决方法代码,以避免使用某些人曾经有过某些问题的功能.


Gre*_*ers 10

例外情况可能是应避免的最常见答案.大多数实现具有相当大的静态内存成本或运行时内存成本.他们也倾向于使实时保证更难.

看看这里为嵌入式C++写的编码标准的一个很好的例子.


jk.*_*jk. 5

文档" 信息技术 - 编程语言,它们的环境和系统软件接口 - 关于C++性能的技术报告 "也为嵌入式设备的C++编程提供了一些很好的信息.


Zin*_*ng- 5

关于早期嵌入式 C++ 标准的基本原理,这是一本有趣的读物

另请参阅这篇有关 EC++ 的文章。

嵌入式 C++ 标准是 C++ 的真子集,即它没有添加任何内容。删除了以下语言功能:

  • 多重继承
  • 虚拟基类
  • 运行时类型信息(typeid)
  • 新样式转换(static_cast、dynamic_cast、reinterpret_cast 和 const_cast)
  • 可变类型限定符
  • 命名空间
  • 例外情况
  • 模板

维基页面上指出,Bjarne Stroustrup(关于 EC++ 标准)说道,“据我所知,EC++ 已经死了(2004 年),如果不是的话,它也应该死了。” Stroustrup 继续推荐Prakash 的答案引用的文档。