一开始我使用了std::map,但是我需要强制释放map的内存。我只使用这个map一次,并且已经分配了大量的内存。这个map只会将内存返回到堆上而不是操作系统,所以它仍然存在。
在搜索后,我发现了boost.pool,但是我不清楚如何使用它来实现一个map。谢谢!
尝试使用交换技巧:
std::map<yourtype> store;
...
// release store's memory
store.swap(std::map<yourtype>());
swap
将交换临时实例和基础实例的内容,然后临时实例将被销毁。如果你编写一个自定义的分配器并将其传递给映射,则可以使用clib的malloc和free。我非常确定这是在操作系统级别。
您的分配器类只需要实现此处所示的方法:http://www.cplusplus.com/reference/std/memory/allocator/
然后,在定义std::map时,将分配器类作为第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
std::map
直接配合使用。请参考https://dev59.com/jH7aa4cB1Zd3GeqPrYUj。 - Dan Nissenbaum
delete
或free
)时,你将内存归还给操作系统。STL对象通常不会在clear
和/或capacity
上释放内存。 - Naszta