0

C++ で割り当てられたすべてのオブジェクト (new 演算子によって割り当てられた) (独自のメモリ マッピングを持つものだけでなく、ヒープ上にあるものも) を列挙するにはどうすればよいですか?

メモリリークを見つけるためにこれが必要です。

プラットフォーム: Linux、gcc、i386、AMD_K64 (より良い: プラットフォームに依存しない)

正式な方法はないかもしれませんが、無駄のない回避策があるかもしれません。たとえば、アクセスできる内部変数はありますか? ヒープの管理に使用されるリストへのポインターでしょうか。

4

3 に答える 3

0

いつでも valgrind を使用してメモリ リークをチェックできます。パッケージマネージャーでインストールするか、http: //valgrind.org/からダウンロードしてコンパイルします。

アプリケーションをデバッグ モードでコンパイルすると、解放/削除されていないリソースを割り当てたファイル/行を特定できます。

于 2014-03-27T14:04:44.853 に答える
0

valgrindを使用して、必要なことを正確に実行し (malloc を独自の実装に置き換えます)、割り当て/解放をカウントします

于 2014-03-27T14:04:54.090 に答える
0

記憶喪失には潜在的に2つの形態があります

  1. 割り当てられたメモリですが、どこからも参照されていないため、削除できません。これは適切なリークです。Linux では、選択される主なツールはvalgrindです。Valgrind は複数のツールのフレームワークです。目的のツールはmemcheck ... です。これは、リークやその他のメモリの問題について報告する動的分析ツールです。これは、割り当てられたメモリを列挙するだけではありませんが、まだ参照されているかどうかも確認する必要があります。
  2. 割り当てられたメモリはまだ参照されていますが、どういうわけか忘れてしまいました (たとえば、誰も削除しないために無限に成長するベクトル)。これは、割り当てたすべてのメモリの構成を知らせるツールが必要な場所です。ここでも valgrind が役に立ちます。今回のツールはmassifという

まだまだ他にもツールはあると思います。これらはかなり人気があります。

Solaris では、プロファイリングとメモリ分析のための Sun の Studio でのリーク追跡とアナライザーには libumem をお勧めします。

于 2014-03-27T14:12:25.750 に答える