我是一名C++程序员,多年来一直听到STL 不适合在嵌入式环境中使用的概念,因此通常禁止在嵌入式环境项目中使用.我相信像Boost这样的STL库功能更强大,并提供一个更快,更容易出错的开发手段(当然语法有点吓人,但一旦过去,我认为这是一个真正的宝藏).而且,我发现STL很重要并且增加代码荒谬的最终足迹的说法因为它是模板化的,只会获得他要求的可编译代码,而不是整个STL.
我的问题是这个民粹主义者的原因是什么(至少我认为是这样的大多数人都这么认为)这个概念称STL 不适用于嵌入式环境?
我确实看到了类似性质的问题,但在此我希望能帮助指出STL和嵌入式环境的一般优缺点.
编辑:所以在这里我将按照回复的
说法将点数加起来:
1.可移植性问题
2.通过STL容器处理巨大的dymanice分配
3. STL很难调试
4. STL中的深层函数调用导致编译器性能低下内联弱(函子的力量无用!)
STL有很多问题(如EASTL所述),在嵌入式系统或小规模系统上,主要问题通常是它管理(内存)的方式.一个很好的例子就是Aquaria的PSP端口.
我的建议是第一次测试,在遵循假设之前,如果测试显示你使用了太多的空间/处理器周期,那么可能一两个优化可以将它推入"可用"的范围.
最后,boost是基于模板的,所以如果你查看生成的模板代码的大小,它将与STL相同.
编辑/更新:
清理我的最后一句话(这只是提到VS VS STL).在C中,你可以(ab)使用相同的代码在共享相同标题(或布局)的不同结构上执行相同的工作,但是使用模板,每种类型都可以获得自己的副本(我从不测试任何编译器是否是如果"优化大小"被提升,那么即使它与刚刚生成的完全相同(在机器/组件级别上)也足够聪明.boost具有读取更清晰,并且有更多东西塞进其中的优点,但是由于大量(巨大的)标题,这会导致编译时间过长.STL获益是因为你可以通过你的项目,而不需要下载/伴随boost.
这取决于嵌入式的含义.在Atmel8系统上,只有很少的内存.这么少,你真的没有一个合理的malloc.在这种情况下,您希望非常明确地管理内存,可能使用所需类型的静态数组.如果你有这个,你基本上不需要大部分的STL.
在手臂系统上,你有很多公羊.使用STL!