2010-03-09 91 views
1

在一个嵌入式程序中,我有一个屏幕对象需要管理一系列要显示的项目。项目的初始列表将从屏幕加载的简单数据库中提取,列表将通过“添加”和“删除”事件进行更新。这份清单需要按照一定的标准进行排序。我正在寻找一个可以帮助我完成此任务的容器类。此外,系统中没有动态内存,所以我需要有一个空物品的内存池,当我完成物品时,我可以将其装入容器并返回到空闲池。寻找容器和内存池解决方案

任何人都知道任何适当的C++标准库或Boost?或者可能是另一种解决方案

回答

1

如果您使用标准容器(例如std::mapstd::set),则需要考虑不同的动态分配:内部容器数据结构的分配以及要存储在容器中的自己数据的分配。内部数据结构的分配可以通过提供你自己的std :: allocator来定制(我相信你可以找到满足你需求的一个,有很多可用的)。您自己的数据结构的分配需要分开处理,最常见的是通过执行类型特定的newdelete运算符。斯科特迈尔斯在他的一本书中有一篇关于这方面的文章。

另一种解决方案是使用Boost.Intrusive,一组容器,其中容器所需的所有内部数据项都存储在您自己的数据结构中(这就是为什么它们被称为侵入式)。这样可以让您避免使用两种不同的分配方案,因为您只需要担心自己的数据分配问题。

3

为什么不使用STL,但提供自己的分配器和释放器,例如STL向量被定义为template<class T,class A = std::allocator<T>> vector {},您可以创建并设置自己的分配器,从您的内存池请求内存空间。

至于内存分配器,您可以使用现有的内存分配器,如Hoard http://www.hoard.org/或Ned Allocator http://www.nedprod.com/programs/portable/nedmalloc/,这是相当高性能和良好的嵌入式系统。