mon*_*ing 11 c++ memory stl vector map
我正在使用std :: map,我似乎无法将内存释放回操作系统.看起来像,
int main(){
aMap m;
while(keepGoing){
while(fillUpMap){
//populate m
}
doWhatIwantWithMap(m);
m.clear();//doesnt free memory back to OS
//flush some buffered values into map for next iteration
flushIntoMap(m);
}
}
Run Code Online (Sandbox Code Playgroud)
每个(fillUpmap)分配大约1gig,所以我非常有兴趣在它耗尽我的所有记忆之前将它恢复到我的系统.
我经历过与std :: vector相同的事情,但是我可以通过与空std :: vector交换来强制它释放.这不适用于地图.
当我使用valgrind时它表示所有内存都被释放,所以它不是泄漏的问题,因为一切都在运行后很好地清除了.
编辑:
清除后必须出现冲洗.
小智 13
m.clear() 将内存释放回堆,但堆实现通常不会将其释放回操作系统(即使它们可以,碎片等问题也很难).
这是默认分配器的工作方式,如果您为地图指定了自己的分配器,它可能有自己的缓存.但是,即使在这种情况下,它也应该被缓存以便立即重用.
地图没有像矢量那样的容量与大小的概念.