我是一名C++程序员,多年来一直有人认为STL在嵌入式环境中不是很好的,因此通常被禁止用于基于嵌入式环境的项目。我相信STL库的功能要强大得多,并且提供了一种更快、更容易出错的开发方法(当然语法不太可怕,但我曾经认为它是一个真正的宝藏).Also,我认为STL很重,并且增加了代码的最终足迹,因为它是模板化的,因为它只会得到他所要求的可编译代码,而不是整个STL。
我的问题是,为什么会出现这种民粹主义(至少是我周围的大多数人都这么认为)的概念,称为STL是,而不是嵌入式环境的?
我确实看到了一个类似的问题,但在这里,我希望能在这里帮助指出STL和嵌入式环境的总体利弊。
编辑:因此,在这里,我将把答复加在一起:
发布于 2010-10-04 07:45:07
在嵌入式系统或小型系统中,STL存在很多问题(如EASTL这里所描述的),主要问题通常是它管理(its)内存的方式。PSP水瓶港就是一个很好的例子。
不过,我的建议是第一次测试,在遵循假设之前,如果测试显示您使用了过多的空间/处理器周期,那么也许一两个优化就可以将其推入“可用”的范围。
最后,boost是基于模板的,所以如果您查看生成的模板代码的大小,它将受到与STL相同的影响。
编辑/更新:
来澄清我的最后一句话(这只是为了提高对STL的支持)。在C中,您可以(Ab)使用相同的代码在共享相同的头(或布局)的不同结构上完成相同的工作,但是对于模板,每种类型都可能得到自己的副本(我从未测试过任何编译器是否足够聪明,如果封装了“优化大小”),即使它与刚刚生成的编译器完全相同(在机器/程序集级别上)。boost的优点是阅读起来要干净得多,而且里面塞满了更多的东西,但这可能会导致编译时间过长,这是因为copius数量(有时是巨大的)头。STL获得好处是因为您可以传递您的项目,而不需要下载/添加boost。
发布于 2010-10-04 07:44:11
这取决于你所说的嵌入是什么意思。在Atmel8系统中,有很小的内存。太少了,你不可能有一个合理的麦高乐。在本例中,您希望非常显式地管理内存,可能需要使用所需类型的静态数组。如果您已经做到了这一点,您基本上不需要大部分的STL。
在手臂系统上,你有足够的内存。使用STL!
发布于 2010-10-04 08:03:35
我偶然看到了这样的演示:嵌入式系统编程的标准C++
模板的大部分复杂性在于编译器,而不是运行时系统,这在一定程度上是问题所在--我们不确定编译器能够完成多大的优化。事实上,基于STL的C++代码应该比不使用模板甚至C代码的C++代码更紧凑、更快!
https://stackoverflow.com/questions/3853382
复制相似问题