如何使用boost.pool来实现类似stl映射的映射



一开始我使用std::map,但我需要强制映射来释放内存。我只使用过一次地图,并且分配了大量内存。映射只将内存返回到堆,而不返回到操作系统,因此它仍然存在。

经过一些谷歌搜索,我找到了boost.pool,但我不清楚如何使用它实现地图,谢谢!

尝试使用交换技巧:

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

在交换中,您将创建映射对象的临时实例,swap将交换临时实例和基础实例的内容,临时实例将被销毁。

如果您编写了一个自定义分配器并将其传递给映射会怎么样。你的alocator可以免费使用clib的malloc。我敢肯定这是操作系统级别的。

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

然后,当你定义你的std::map时。。将分配器类作为第三个模板参数传递: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

最新更新