關於c++中map的內存占用問題


     研究了下c++中map的內存占用情況。很多人說map中的erase以及clear不能釋放內存,這幾天實驗了下,這個說法是不確切的,較為准確的說法應該是,map中的erase以及clear,不能,“馬上”釋放內存。map有自己的機制回收內存,用erase以及clear之后,如果沒有特殊需求,可以認為那部分內存已經釋放了。map不會馬上釋放刪掉內容的內存,而是會對內存進行“預留”,如果確實很長時間用不到預留的內存,才會釋放。

     做了這樣幾個實驗,P1不停的填充map,監控程序內存占用情況。自然內存是不斷上升的。P2則是向map中填充200M數據后,一個一個進行erase到0個,然后再重新填充。可以看到,填充過程內存連續增加,可是erase過程,內存沒有連續減少。而是一段時間之后,忽然減少的2M左右。重新填充,內存再增加至之前的200M。P3的過程是,先向Map中填充200M數據,然后erase掉偶數index的數據(即刪掉100M),然后再填充200M,如此往復。發現內存占用開始不斷增加,到刪除100M數據時,內存不變。第二輪填充開始,內存仍不變,直到填充100M以上后,內存開始繼續增加。

    由以上實驗可知,map有較為科學的內存回收機制。可以認為clear以及erase的空間,map會在合適的時間回收。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM