Visual Studio 2008 を使用して C++ を使用して作成された Windows アプリケーションがあります。メモリ使用量に関する統計を取得して、メモリ使用量に関するボトルネックと場所を見つけたいと考えています。理想的には、コード自体にカウンター/プロファイリング ロジックを追加することなく、これを行うツールが必要です。基本的に私が探しているのは次のとおりです。
- すべての割り当てのリスト (解放されたかどうかは関係ありません。何かが割り当てられるたびに知りたいです)
- 各割り当てのコールスタックと、コードが呼び出されてメモリが割り当てられた回数を表すカウンター。
- 解放されたメモリと解放されていないメモリに関する情報 (リークを見つけるため)。理想的には、メモリがまだ使用されているかどうか、またはメモリが実際にリークしたかどうか (スコープまたはその他のインテリジェントなメカニズムを介して) を判断するのに十分なほどインテリジェントです。
無料のツールかどうかは気にしません。ここに私がすでに見たいくつかのツールがあります:
- Rational PurifyPlus : 正直なところ、私はこのツールをあまり活用できていません。多くの誤検知を返します。また、上記のリストの最初の 2 つの項目は表示されず、代わりにメモリ エラーとリークのみに焦点が当てられているようです。
- Sysinternals VMMap : このツールは興味深いもので、メモリがどのように分散されているかを確認できます (スタック、ヒープ、共有ヒープなど)。また、割り当てのコール ツリーも表示されますが、あまり直感的ではなく、役に立ちません。データから意味を理解するのは難しい。
- DevPartner Boundschecker : これまでで最も役に立たないツールだと思います。何年も前に DevPartner に買収される前に使用していましたが、以前よりもずっとうまく機能していたことを覚えています。しかし、実際には必要な統計データが得られるわけではなく、メモリ リークを適切に検出できるようにも見えません。
事前にヘルプ/アドバイスをいただければ幸いです。私のアプリケーションはサーバーであり、ストレス テスト中に時間の経過とともに深刻なメモリ増加の問題に悩まされます (そして、最終的には 32 ビット アプリケーションの制限を超える仮想バイトが原因でクラッシュします)。適切なツールを使用すると、メモリを割り当てている場所とメモリ リークの可能性がある場所を特定するのに役立ちます。