研究了下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會在合適的時間回收。
