我遇到下面的問題,我真的不知道我是否錯誤或它的一個非常奇怪的錯誤。我填充了大量的字符串,並希望它在某個點被清除。這裏有一個小例子矢量<string>後不會清除內存,超出範圍
#include <string>
#include <vector>
#include <unistd.h> //sleep
#include <iostream>
int main(){
{
std::vector<std::string> strvec;
for(long i = 0; i < 1000000; ++i){
std::string out = "This is gonna be a long string just to fill up the memory used by this fucking pthread\n";
strvec.push_back(out);
}
std::cout << "finished loading 1st\n";
sleep(10); // to monitor any changes
}
std::cout << "out of scope\n";
sleep(10);
return 0;
}
我的問題是,如果我監視與「頂」,內存使用量下降只是一個非常小的量(我認爲它可能是矢量開銷)內存使用情況,但最好像不是釋放。怎麼會?我用'long long'測試了相同的場景,但是這裏一切正常。
在std ::矢量參考狀態,即,如果所包含的值是無指針時,析構函數被調用。似乎不是真正的字符串,雖然...
我欣賞每一個答案。
(爲方便起見:我使用與克++ 4.7.2的Debian Linux的64位)
編輯:謝謝你的答案爲止。
與vagrind地塊,現在我已經異形堆的使用情況(是的,實際上是如預期)它能夠在它應該在點正確釋放。但是,爲什麼我實際上看到一個巨大的整數使用的變化,但不是與字符串(也在頂部)?
我需要對此有一定的瞭解,因爲我需要能夠在特定時間爲多線程服務器應用程序釋放我的內存,這可能會在不重啓的情況下運行數週或更長時間。我什麼時候才知道C++內存管理器決定將某些內存還給操作系統?
嘗試使用[valgrind](http://valgrind.org/)進行調試,它會告訴你內存是否空閒,並且可能比'top'更有幫助。 – Couchy311
什麼是人們堅持記憶被浪費?自由內存不會*沒有任何東西* - 它不比計算機中完全沒有的內存好。只有正在使用的內存纔會有好處。 –