2011-07-10 3 views
3

同じ実行中のプロセスからプログラムでヒープメモリ消費を測定する最も効率的で正確な方法は何ですか?私は(合理的に可能な限り正確に)起動時からnewmallocをされているどのくらいのメモリを推定したい、マイナス質問の範囲プロセスのメモリ消費を測定するLinuxのメカニズムf

freeまたはdeleteをされているメモリは、Linuxおよびおそらく他のLinux環境です。言語はCまたはC++


EDITどのmalloc実装によって、私の目的は、割り当てられた/開催されたブロックの実際の数(及びサイズ)を知っているために十分である が、私は詳細を必要としないのいずれかであります実際のmallocメモリから解放されたメモリを差し引いたもの

+1

プログラムの中から(自分自身を監視したい)、外から(実行中のプログラムを監視したい)?人間のために(インタラクティブな使用)または自動? –

+0

おそらくCライブラリを使用しています – lurscher

+4

コードを記述した場合は、割り当て/削除用のラッパーを追加し、バイト数をカウントします。 –

答えて

0

valgrindを使用してプログラムを完了すると、メモリ使用量に関するレポートが表示されます。新たな用途のmalloc関数を仮定し

http://valgrind.org/

+0

申し訳ありませんが、私の質問は十分にはっきりしませんでした。私は同じ実行プロセスからプログラム的に意味していました。これを反映するように編集しました – lurscher

3

hereを見て。

プロセスのメモリ割り当ての詳細については、/ proc/[pid]/mapsを参照してください。

また、linuxはcopy-on-writeを実装しています。これは、時にはプロセスがメモリを共有できることを意味します。これは、後でexecを呼び出さずにプロセスがforkされた場合に特に当てはまります。

1

あなたは/ proc/u/statからの読書を考えましたか? (ここで "u"はあなたのpidです)

3

推定にはmallinfoを使用できます。私はちょうどこれがプロセスかシステムかどうかわからないこれを見つけた。:/

あなたが尋ねていることを完全にはわかっていない、解放されたmallocはメモリ断片化のために実際の使用量よりも少ないあなたは本当にあなたがカスタムアロケータ(既存のものの周りに小さなラッパーである)を使用する必要がある番号が必要ですどこでもあなたのコードでは苦しそうになるでしょう。

0

tcmalloc from Google Perftoolsとリンクすると、ヒープ使用量に関するかなりの情報が得られます。メモリリークを突き止め、 "誰がそのRAMを誰に割り当てたか"を判断するように設計されていますが、ヒープに関する多くの質問に答えるための十分な計装を提供します。

関連する問題