【问题标题】:Lookin' for a container and memory pool solution寻找容器和内存池解决方案
【发布时间】:2010-03-09 08:56:07
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    为什么不使用 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/,性能相当高,适合嵌入式系统。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-07-10
        • 1970-01-01
        • 2014-07-20
        • 2017-07-27
        • 1970-01-01
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多