2012-01-26 62 views
1

可能重複:
How to downsize std::vector?
C++ vector::clear如何從std :: vector中恢復內存?

當我打電話與大尺寸有些矢量vector<double>::clear(),我沒有看到內存返回到系統中的任務管理器/性能。

顯然這是因爲容器expects you will use that same memory again。我不打算再次使用該內存,一旦任務完成,內存將更好地返回到系統。

是否有辦法確保立即內存返回到系統,除/使用像vector<double> * v指針調用vdelete,當我們想要的記憶又回到了這個系統?

+1

已經問[C++向量::明確] [1] [1]:http://stackoverflow.com/questions/3477715/c-vectorclear – Andrew

+4

你真的不應該使用任務管理器這一點。 – 2012-01-26 16:11:22

+1

幾乎所有人都回答這個問題只會讓'vector'將內存釋放回內存分配器。您的標準庫和操作系統何時將未分配的內存從進程中釋放回系統時使用的標準完全是另一回事,所以即使它運行正常,您也不一定能夠在任務管理器中看到它。 –

回答

11

C++ 11(請注意,這不是嚴格保證工作,但它很可能就是這樣):

your_vector.clear(); 
your_vector.shrink_to_fit(); 

如果您不能使用C + +11功能,那麼你可以使用下面的技巧,它會清除你的載體和釋放所有的內存,它使用:

std::vector<double>().swap(your_vector); 

這就是說,它可能是,即使載體將釋放它分配任何內存,分配器贏了將內存回饋給操作系統。但至少該內存將可用於您的應用程序的其他部分。

+0

GRR ..(代表「grrreat答案!」) – bobobobo

+0

實際上,根據[這裏](成員http://bytes.com/topic/c/答案/ 620047-resize-clear-vector),如果你將範圍塊放在臨時文件中,它實際上應該清除內存 – bobobobo

0

你可以把你的矢量的塊裏面,像這樣

...//your code 
{ 
    vector<double> v(10); 
    //use it 
} 
...//your other code 

這樣你的載體「V」將被銷燬,內存會自動在範圍年底發佈(截止後})。介紹shrink_to_fit方法應該這樣做

+0

無可以做的,先生.. Vector的對象 – bobobobo

2

你可以使用交換技巧來做到這一點:

vector<double>().swap(v); 

這將創建一個新的空載體,然後交換它的內容用v則v是空的,它曾經擁有的內存會。釋放。