2014-03-12 66 views
3

的可用內存我有一個計劃:地圖<int, string>

#include <iostream> 
#include <map> 
#include <string> 
#include <algorithm> 
#include <cstdlib> 
#include <iomanip> 
#include <vector> 
#include <stdarg.h> 
#include <stdio.h> 
#include <unistd.h> 
using namespace std; 

int main() { 
    map<int, string> m; 

    for (int i = 0; i < 1000000; i++) 
    { 
     m[i] = "jahsdghsagdfv sahgvsahgd fvsahgdf fsdfjsadvhjgsd jhgfhsahfvsafh asfvasgfv jhgfdvsahgvfs"; 
    } 
    m.clear(); 
    while (1) {sleep(5);} 
    return 1; 
} 

明確的()什麼都不做。在內存監視器中,我看到內存使用率爲184 Mb,清除後沒有任何變化。爲什麼?如何清除地圖的內存?

+1

您使用什麼內存顯示器?你是什​​麼意思,它什麼都不做?它從地圖中刪除所有元素。 –

+0

在Ubuntu的Statndard – mitch

+7

這有很多重複,但答案是內存是(或*可能*)由'map'釋放,但仍然映射到您的進程,以防需要再次分配內存。一種優化。如果另一個進程需要更多的內存,它可能會從您的進程中獲取可用內存。 –

回答

1

是,地圖::明確的做一些事情:「將刪除地圖容器(其被破壞)的所有元素,使容器與大小爲0」 數據也不會從堆棧/堆中移除,但這不會影響到您,因爲您將沒有指針,也沒有對該過時數據的轉換類型。 可能當你重新填充地圖時,內存區域將被重新使用並更新爲新值(如果它沒有被其他變量使用)。

相關問題