【发布时间】:2011-02-07 09:53:20
【问题描述】:
我正在使用 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 进行交换来强制它释放。这不适用于地图。
当我使用 valgrind 时,它说所有内存都已释放,因此泄漏不是问题,因为运行后一切都很好地清除了。
编辑:
flush 必须出现在 clear 之后。
【问题讨论】:
-
请注意,您的操作系统可能会在您尝试分配内存时分配地址空间,但仅在您触摸内存时才分配真实的物理 RAM。如果您不再使用该 RAM 但其他程序需要它,则其内容将被换出到磁盘。因此,释放内存实际上会释放 RAM。