在内存受限的嵌入式系统中使用boost

时间:2020-03-06 15:04:17  来源:igfitidea点击:

我们正在使用c ++来开发在嵌入式系统上的Windows CE 4中运行的应用程序。

我们的约束之一是,应用程序使用的所有内存都应仅在启动期间分配。我们编写了许多容器和算法,它们仅使用预分配的内存,而不分配新的内存。

我们认为我们在这种情况下可以使用boost库而不是我们自己的容器吗?

欢迎任何意见和/或者建议!

非常感谢,

尼克

解决方案

我们可以为容器编写自己的分配器,该分配器从固定大小的静态缓冲区分配。根据容器的使用模式,分配器可以像增加指针一样简单(例如,当我们在应用程序启动时仅将内容插入容器一次,并且不连续添加/删除元素时)。

Boost是一组库。其中一些集中在模板元编程上。那些甚至在运行时不使用任何内存。但是问题似乎与更换容器有关。我怀疑除了使用自定义分配器之外是否可能。但是即使那样,我们很可能仍将使用普通的STL容器,而不是使用boost。对于那些尚不包含TR1的编译器,Boost只提供TR1容器。

不要使用Boost。

这是一个很大的库,基本内存分配要求与库设计人员的要求有很大不同。

即使我们可以使用自定义分配器使当前版本的Boost可以根据要求工作,它也可能会因新版本的Boost而中断。

可以随意查看Boost源代码,以获得一些有用的想法,但是可以根据需要使用自己的实现。

我们将boost用于嵌入式系统。借助boost,我们可以选择使用的东西。我们在所有项目中都使用smart_ptrboost :: bind。我们为廉价手机编写软件。
而且,如果Windows CE可以在硬件上运行,我希望可以使用部分提升功能。
Boost的某些部分没有分配,我们可能会发现它们很有用。

我会根据要求进行选择。

像我们使用的任何东西一样,我们需要了解成本。

用Boost容器替换容器不是一个好主意。制作适当的自定义分配器的工作并不是那么糟糕,但是我们将违反"启动时分配"规则的精神。根据我的经验,此规则背后的想法通常是确保我们不必在运行时处理内存不足的情况。这样做的目的是确保我们一开始就拥有所有可能需要的内存,这样以后系统的任何部分都不会出现内存不足的情况。

如果将Boost容器与自定义分配器一起使用,我们将突然不得不处理容器从其分配的池可能为空的可能性,从而消除了"启动时分配"规则的目的。

在内存设备有限的情况下,我将避免使用比静态分配的数组更复杂的容器。