嵌入式环境中的STL

Alo*_*ave 10 c++ embedded stl

我是一名C++程序员,多年来一直听到STL 适合在嵌入式环境中使用的概念,因此通常禁止在嵌入式环境项目中使用.我相信像Boost这样的STL库功能更强大,并提供一个更快,更容易出错的开发手段(当然语法有点吓人,但一旦过去,我认为这是一个真正的宝藏).而且,我发现STL很重要并且增加代码荒谬的最终足迹的说法因为它是模板化的,只会获得他要求的可编译代码,而不是整个STL.

我的问题是这个民粹主义者的原因是什么(至少我认为是这样的大多数人都这么认为)这个概念称STL 不适用于嵌入式环境?

我确实看到了类似性质的问题,但在此我希望能帮助指出STL和嵌入式环境的一般优缺点.

编辑:所以在这里我将按照回复的 说法将点数加起来:
1.可移植性问题
2.通过STL容器处理巨大的dymanice分配
3. STL很难调试
4. STL中的深层函数调用导致编译器性能低下内联弱(函子的力量无用!)

Nec*_*lis 9

STL有很多问题(如EASTL所述),在嵌入式系统或小规模系统上,主要问题通常是它管理(内存)的方式.一个很好的例子就是AquariaPSP端口.

我的建议是第一次测试,在遵循假设之前,如果测试显示你使用了太多的空间/处理器周期,那么可能一两个优化可以将它推入"可用"的范围.

最后,boost是基于模板的,所以如果你查看生成的模板代码的大小,它将与STL相同.

编辑/更新:

清理我的最后一句话(这只是提到VS VS STL).在C中,你可以(ab)使用相同的代码在共享相同标题(或布局)的不同结构上执行相同的工作,但是使用模板,每种类型都可以获得自己的副本(我从不测试任何编译器是否是如果"优化大小"被提升,那么即使它与刚刚生成的完全相同(在机器/组件级别上)也足够聪明.boost具有读取更清晰,并且有更多东西塞进其中的优点,但是由于大量(巨大的)标题,这会导致编译时间过长.STL获益是因为你可以通过你的项目,而不需要下载/伴随boost.

  • 该链接中的算法并不多,所以可能是静态数组使用的STL <algorithms>在容器不可用的情况下是可用的吗?每个人都专注于数据结构,但这只是图片的一半 (2认同)

Sin*_*ion 8

这取决于嵌入式的含义.在Atmel8系统上,只有很少的内存.这么少,你真的没有一个合理的malloc.在这种情况下,您希望非常明确地管理内存,可能使用所需类型的静态数组.如果你有这个,你基本上不需要大部分的STL.

在手臂系统上,你有很多公羊.使用STL!

  • +1用于指出"嵌入式"涵盖了各种系统,从微型微控制器到几百*字节*的RAM一直到具有许多*GB*RAM的高端系统 - 根据经验STL可能适用于中高端嵌入式系统,可能不适用于低端系统. (3认同)
  • 使用动态集合获得良好结果不需要*很多*ram.10千字节可能是可用的. (2认同)