代码之家  ›  专栏  ›  技术社区  ›  waffleman

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

  •  1
  • waffleman  · 技术社区  · 14 年前

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

    有人知道C++标准库或Boost中有什么合适的吗?或者另一个解决方案?

    2 回复  |  直到 14 年前
        1
  •  1
  •   hkaiser    14 年前

    如果使用标准容器(例如 std::map std::set )您需要担心不同的动态分配:内部容器数据结构的分配和您自己要存储在容器中的数据的分配。内部数据结构的分配可以通过提供自己的STD::分配器(我确信你能找到一个适合你的需求,有很多可用的)。您自己的数据结构的分配需要单独处理,通常是通过实现特定类型 new delete 运算符。斯科特·迈耶斯在他的一本书中有一篇关于这一点的好文章。

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

        2
  •  3
  •   uray    14 年前

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

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