寻找容器和内存池解决方案

时间:2010-03-09 08:56:07

标签: c++ user-interface boost c++-standard-library

在嵌入式程序中,我有一个需要管理要显示的项目列表的屏幕对象。初始项目列表将从屏幕加载的简单数据库中提取,列表将通过“添加”和“删除”事件进行更新。该列表需要根据特定标准进行排序。我正在寻找一个可以帮助我实现这一目标的容器类。此外,系统中没有动态内存,因此我需要有一个空项目的内存池,我可以将其加载到容器中,并在完成项目后返回到空闲池。

任何人都知道C ++标准库或Boost中的任何内容吗?或许是另一种解决方案?

2 个答案:

答案 0 :(得分: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/,它具有相当高的性能并且对嵌入式系统有益。

答案 1 :(得分:1)

如果您使用标准容器(例如std::mapstd::set),您需要担心不同的动态分配:内部容器数据结构的分配和您想要的自己的数据分配存储在容器中。内部数据结构的分配可以通过提供你自己的std :: allocator来定制(我相信你能找到一个符合你需要的,有很多可用的)。您自己的数据结构的分配需要单独处理,最常见的是通过实现特定于类型的newdelete运算符。 Scott Meyers在他的一本书中有一篇很好的文章。

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