2011-11-10 16 views
1

ピークヒープの内容を調べるツールがあるのだろうか?ヒープの内容を調べるツールはありますか?

たとえば、C++(MSVS2005)で書かれたアプリケーションがあり、ピークヒープ消費量とその内容を知りたいとします。

よろしく、 マクシム

+1

Hmm ... Linuxでのvalgrindは、合計使用量を示します。おそらくいくつかの調整をすることで、割り振りと割り振り解除を分けることができます。 GCC 4.6.2もスタック使用量を出力します(静的に)。 –

+0

'valgrind --tool = massif'はlinuxで素晴らしい仕事をしています(linux VMをセットアップしてそこでコードを実行することができれば):http://valgrind.org/docs/manual/ms-manual.html –

答えて

1

あなたはWinDBGの(!ヒープコマンドを参照)、マイクロソフト社のDebugging Tools for Windowsの自由なコレクションの一部を使用して、プロセスのヒープ割り当てと使用状況を探索することができます。私が見つけた最良の参考文献は標準参考書Advanced Windows Debuggingでしたが、Googleは使い方について助けてくれました。

0

_heapwalkを使用すると、現在ヒープを構成しているブロックを調べることができます。結果が正確ではないことに注意してください。

明らかに、使用中であるとマークされているブロックは、ヒープに現在割り当てられている領域について説明しますが、必ずしも最大値程度ではありません。しかし、(少なくともあなたが_heapminを呼び出さなかったと仮定して)、ヒープ内の空きブロックは使用されているがそこから解放されているためそこにあります。

今のところ、それらのすべてがまったく同じ時間に実際に使用されているとは限りません。小さなブロックが解放され、より大きなブロックが要求されると、より小さいブロックは通常、その要求を満たすことができなくなります。同時に、ヒープで使用されているメモリの最大量が気になるのですが、そのうちのいくつかが「空き」とみなされる可能性は必ずしも多くの問題ではありません。そのため、単にすべてブロックのサイズを追加すると_heapwalkためのリンクがあり

(あなたが使用した入力データなどとの)プログラムが使用する最大ヒープサイズのかなり合理的な推定を与えますデモコードのビット。コードはそれほど有用ではありませんが、関数を呼び出す方法を示しています。そのため、データを1つの数値にまとめることがほとんどです(デモでは各ブロックのデータを個別に出力します) 。

関連する問題