考慮下面的代碼,與g++ problem.cpp -o problem
編譯:問題的內存釋放用於非動態創建的std ::矢量存儲正常(即,非動態分配)數據
#include <vector>
using namespace std;
int main()
{
while(1){}
return 0;
}
當執行該代碼時,命令top
報告〜80K的內存正在被消耗。
現在考慮下面的代碼:
#include <vector>
using namespace std;
int main()
{
vector<int> testVec;
for(int i = 0;i<100000000;i++)testVec.push_back(i);
while(1){}
return 0;
}
正如預期的那樣,圍繞〜內存300MB消耗頂部報告。
如今終於,考慮下面的代碼:
#include <vector>
using namespace std;
int main()
{
vector<int> testVec;
for(int i = 0;i<100000000;i++)testVec.push_back(i);
testVec.clear();
vector<int>().swap(testVec);
while(1){}
return 0;
}
現在top
報道說〜4196K被消耗 - 爲什麼不是隻〜80K是在第一個例子(!)?我怎麼能最終釋放可能被矢量所消耗的最後一點內存?除了.clear()
之外,我已經讀到了'交換技巧'是爲了釋放所有東西,但顯然它並不像我預期的那樣工作。我錯過了什麼?
向量動態分配他們的數據。他們怎麼會沒有? –
...在底層實現中。我現在看到,也許我的問題陳述確實是天真的,但仍然令人浮想聯翩。 –
由於問題的本質,您正在討論底層實現的最底層細節。你怎麼能同時假裝把它們抽象出來? –