C++ 如何使用boost.pool实现类似于stl映射的映射
起初我使用std::map,但我需要强制map释放内存。我只使用了一次映射,并且分配了大量内存。映射只将内存返回到堆而不是操作系统,因此它仍然存在 经过一番谷歌搜索,我找到了boost.pool,但我不清楚如何使用它实现地图,谢谢 尝试使用交换技巧:C++ 如何使用boost.pool实现类似于stl映射的映射,c++,stl,C++,Stl,起初我使用std::map,但我需要强制map释放内存。我只使用了一次映射,并且分配了大量内存。映射只将内存返回到堆而不是操作系统,因此它仍然存在 经过一番谷歌搜索,我找到了boost.pool,但我不清楚如何使用它实现地图,谢谢 尝试使用交换技巧: std::map<yourtype> store; ... // release store's memory store.swap(std::map<yourtype>()); std::地图存储; ... //释放存储
std::map<yourtype> store;
...
// release store's memory
store.swap(std::map<yourtype>());
std::地图存储;
...
//释放存储的内存
swap(std::map());
在swap中,您将创建映射对象的临时实例,
swap
将交换临时实例和基础实例的内容,临时实例将被销毁。如果您编写自定义分配器并将其传递给映射,该怎么办。你的alocator可以免费使用clib的malloc。我很确定这是在操作系统级别
您的分配器类只需要实现如下所示的方法:
然后,当您定义std::map。。将分配器类作为第三个模板参数传递:
例如:
std::map
本书中的此链接还提供了一些创建自己的分配器的示例代码:
警告:我认为大多数分配器不将内存返回操作系统的原因是,以后保留内存比每次返回操作系统并获得更多内存更快;因此,您可能会看到一些速度效率低下的问题
Edit:也发现了这个外观整洁的方法:Swaped地图会有同样的问题吗?i、 e,将内存返回堆而不是操作系统,所以仍然存在…@xueyumusic:你应该试试。当您为堆返回内存(
delete
或free
)时,您将内存返回给操作系统。STL对象通常不会在clear
和/或capacity
上释放内存。答案仅在完美场景中有效。在现实生活中,在其他地方的相同页面上存在分配,因此无法将页面返回到操作系统。另外,std::map::clear可以释放内存。Boost池在使用std::map
时不能开箱即用。看见
std::map<KeyType, ValueType, less<KeyType>, MyAllocator>