我正在使用std :: 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);
}
}
每個(fillUpmap)分配各地1GIG,所以我在它吃了我所有的記憶之前得到這回我的系統非常感興趣。
我經歷了與std :: vector相同,但在那裏我可以強制它通過與空的std :: vector進行交換來釋放它。這不適用於地圖。
當我使用valgrind時,它說所有的內存都被釋放,所以它不是泄漏問題,因爲一切運行後都會很好地清理掉。
編輯:
清除後必須出現刷新。
請注意,當您嘗試分配內存時,您的操作系統可能會分配地址空間,但只有在您觸摸內存時分配實際的物理內存。如果您不再使用該RAM,但其他程序需要它,則其內容將被換出到磁盤。結果釋放內存實際上釋放了內存。 – MSalters 2010-04-13 11:39:23