[ad_1]
こんにちはチーム。リスト、マップ、ベクターなどに新しい要素を挿入しながら、全体的に memcheck を分析しようとしました。 Linux の特定の PID でメモリ使用率が高くなります。 リスト オブジェクトがクリアされた後も、同じメモリ使用率が表示されます。
#include<bits/stdc++.h> using namespace std; #include<unistd.h> int main() { list<string> l1; for(int i=0;i<10000000;++i) { stringstream ss; ss << "000000000000000" << i << "__" << i << "00000000000000000000"; l1.push_back(ss.str()); } cout<<"Before Size : "<<l1.size()<<endl; sleep(5); l1.clear(); cout<<"After Size : "<<l1.size()<<endl; getchar(); }
コンパイル: g++ Design.cpp -o Design
Linux ターミナルでメモリ使用量が多いことがわかりました:
トップ -b | grep -i 設計
19081 issue 20 0 1231.4m 1.192g 1.0m S 0.0 32.2 0:13.67 Design 19081 issue 20 0 1231.4m 1.192g 1.0m S 0.0 32.2 0:13.67 Design
私が試したこと:
マップのポインタオブジェクトを試してみましたが、それでもメモリは減りません。
解決策 2
たとえば、次を参照してください。
https://stackoverflow.com/questions/12050777/how-to-return-memory-from-process-to-the-os[^]
解決策 1
何を期待していましたか?
10,000,000 個のストリームを作成し、それらすべてをリストに追加します。
list<string> l1; for(int i=0;i<10000000;++i) { stringstream ss; ss << "000000000000000" << i << "__" << i << "00000000000000000000"; l1.push_back(ss.str()); }
リストを使い終わったときにリストをクリアしたとしても、ストリームはまだ存在しており、ストリームが占有していたメモリは、すべてがスコープ外になるまで、つまり関数が終了するまで解放されません。 ここを参照してください: リソースの取得は初期化 – Wikipedia[^]
[ad_2]
コメント