c++ - 嵌入式 C++ : to use STL or not?

标签 c++ stl embedded

我一直是嵌入式软件工程师,但通常在 OSI 堆栈的第 3 层或第 2 层。我不是一个真正的硬件人。我一般一直做电信产品,通常是手机/手机,这通常意味着类似 ARM 7 处理器的东西。

现在我发现自己处于一个更通用的嵌入式世界,在一家小型初创公司中,我可能会转向“不那么强大”的处理器(这是主观的一点) - 我无法预测哪个。

我已经阅读了很多关于在嵌入式系统中使用 C++ 中的 STL 的争论,但没有明确的答案。关于可移植性有一些小小的担忧,还有一些关于代码大小或运行时的担忧,但我有两个主要担忧:
1 - 异常处理;我仍然不确定是否使用它(见 Embedded C++ : to use exceptions or not?)
2 - 我非常不喜欢嵌入式系统中的动态内存分配,因为它会带来一些问题。我通常有一个在编译时静态分配的缓冲池,它只提供固定大小的缓冲区(如果没有缓冲区,系统重置)。当然,STL 做了很多动态分配。

现在我必须决定是使用还是放弃 STL - 为整个公司,永远(它将进入一些非常核心的软件)。

我该往哪边跳? super 安全并且丢失了构成 C++ 的大部分内容(imo,它不仅仅是语言定义),以后可能会遇到问题,或者现在必须添加大量异常处理以及其他一些代码?

我很想选择 Boost ,但是 1)我不确定它是否会移植到我可能想要使用的每个嵌入式处理器上,以及 2)在他们的网站上,他们说他们不保证/推荐它的某些部分用于嵌入式系统(尤其是 FSM,它看起来很奇怪)。如果我选择 Boost,我们稍后会发现问题......

最佳答案

我每天都在研究实时嵌入式系统。当然,我对嵌入式系统的定义可能和你的不一样。但是我们充分利用了 STL 和异常,没有遇到任何无法管理的问题。我们还利用了动态内存(以非常高的速率;每秒分配大量数据包等),并且还不需要求助于任何自定义分配器或内存池。我们甚至在中断处理程序中使用了 C++。我们不使用 boost,只是因为某个政府机构不让我们使用。

根据我们的经验,您确实可以在嵌入式环境中使用许多现代 C++ 功能,只要您动脑筋并进行自己的基准测试。我强烈建议您使用 Scott Meyer 的 Effective C++ 第 3 版以及 Sutter 和 Alexandrescu 的 C++ 编码标准 来帮助您以理智的编程风格使用 C++。 p>

编辑:在 2 年后对此获得支持后,让我发布更新。我们在开发中走得更远,我们终于在代码中找到了标准库容器在高性能条件下太慢的地方。在这里,我们实际上确实求助于自定义算法、内存池和简化的容器。这就是 C++ 的美妙之处,您可以使用标准库并获得它为 90% 的用例提供的所有好处。遇到问题时不要全部扔掉,只是手动优化问题点。

关于c++ - 嵌入式 C++ : to use STL or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226252/

相关文章:

c++ - std::map 一键,二值

c - C 程序中 8、16、32 和 64 位微 Controller 上的字长、int 和指针的大小是多少?

embedded - 减小可执行文件大小的过程

c++ - STL 迭代器 : container. 结束()

c++ - 在 Debian 上为您自己的应用程序添加 SNMP 支持的最佳方式

c++ - 无法在函数内部为 cv::Mat 赋值

c++ - 在结构初始化

c++ - 释放基元 vector

c++ - 中断时发送UDP数据包

c++0x 隐式转换为非标量类型