我是一名 C++ 程序员,多年来一直听到这样的说法:STL 是not good用于嵌入式环境,因此通常禁止在基于嵌入式环境的项目中使用。我相信像 Boost 这样的 STL 库要强大得多,并且提供更快、更少出错的开发方式(当然,语法有点吓人,但一旦过去了)我认为这是一个真正的宝藏)。此外,我发现关于 STL 很重并且增加了代码的最终占用空间的说法是荒谬的,因为由于它是模板化的,所以人们只能得到他要求的可编译代码,而不是整个 STL。
我的问题是,这种称为 STL 的民粹主义(至少我周围的大多数人都这么认为)的原因是什么?not对于嵌入式环境?
我确实看到了一个类似性质的问题,但在这里我希望有人帮助指出 STL 和嵌入式环境的一般优缺点。
编辑:所以在这里我将在回复到来时将要点加起来:
1. 可移植性问题
2.通过STL容器应对巨大的动态分配
3.STL很难调试
4. STL 中的深度函数调用会导致内联能力弱的编译器性能低下(函子的力量毫无用处!)
STL 有很多问题(如此处所述EASTL),在嵌入式系统或小规模系统上,主要问题通常是它管理内存的方式。一个很好的例子是Aquaria 的 PSP 端口.
我的建议是在遵循假设之前进行第一次测试,如果测试显示您使用了太多的空间/处理器周期,那么也许一两个优化可以将其推入“可用”领域。
最后,boost 是基于模板的,所以如果你查看生成的模板代码的大小,它会受到与 STL 相同的影响。
编辑/更新:
为了澄清我最后的陈述(这只是指 boost VS STL)。在 C 中,您可以(ab)使用相同的代码在共享相同标头(或布局)的不同结构上执行相同的工作,但使用模板,每种类型可能会获得自己的副本(我从未测试过是否有任何编译器如果启用了“优化尺寸”,则足够聪明来执行此操作),即使它与刚刚生成的完全相同(在机器/装配级别)。 boost 的优点是读起来更干净,并且里面塞满了更多的东西,但是由于大量(有时很大)的标头,这可能会导致编译时间很长。 STL 的好处是因为您可以传递您的项目而不需要下载/附带 boost。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)