一开始我使用std :: map,但我需要强制地图释放内存。我只使用一次地图并分配了大量内存。该映射仅将内存返回堆而不是OS,因此它仍然存在。
在谷歌之后,我发现了boost.pool,但我对如何使用它实现地图并不清楚,谢谢!
答案 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