我正在使用 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);
}
}
每个 (fillUpmap) 分配大约 1gig,所以我非常想在它耗尽我所有的内存之前将它返回到我的系统中。
我对 std::vector 也有同样的体验,但我可以通过与空的 std::vector 进行交换来强制它释放。这不适用于 map 。
当我使用 valgrind 时,它表示所有内存都已释放,因此泄漏不是问题,因为运行后一切都很好地清除了。
编辑:
flush 必须出现在 clear 之后。
最佳答案
m.clear()
将内存释放回堆,但堆实现通常不会将其释放回操作系统(即使可以,碎片等问题也很难) .
这是默认分配器的工作方式,如果您为 map 指定了自己的分配器,它可能有自己的缓存。但是,即使在这种情况下,它也应该被缓存以便立即重用。
map 不像 vector 那样有容量与大小的概念。
关于c++ - 如何强制我的 std::map 释放使用的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2629018/