如何使用boost.pool来实现像stl map这样的地图

时间:2012-02-09 08:58:42

标签: c++ stl

一开始我使用std :: map,但我需要强制地图释放内存。我只使用一次地图并分配了大量内存。该映射仅将内存返回堆而不是OS,因此它仍然存在。

在谷歌之后,我发现了boost.pool,但我对如何使用它实现地图并不清楚,谢谢!

2 个答案:

答案 0 :(得分:0)

尝试使用swap技巧:

std::map<yourtype> store;
...
// release store's memory
store.swap(std::map<yourtype>());

在swap中,您将创建一个map对象的临时实例,swap将交换临时实例和基本实例的内容,并且临时实例将被销毁。

答案 1 :(得分:-1)

如果您编写自定义分配器并将其传递给地图,该怎么办?你的alocator可以使用clib的malloc和free。我很确定这是在OS级别。

您的allocator类只需要实现此处显示的方法:http://www.cplusplus.com/reference/std/memory/allocator/

然后在定义std :: map时,将allocator类作为第3个模板参数传递:http://www.cplusplus.com/reference/stl/map/

例如:

std::map<KeyType, ValueType, less<KeyType>, MyAllocator> 

本书中的这个链接还有一些用于制作自己的分配器的示例代码:http://www.josuttis.com/libbook/memory/myalloc.hpp.html

警告:我认为大多数分配器不向操作系统提供内存的原因是,以后更快地保留它,而不是每次都返回操作系统并获得更多;所以你可能会看到速度效率低下。

修改:还发现这个很好看的方法:http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4079