1

は動的メモリ割り当てを使用しません(静的 A* a = new を実行する 3 行を除きます... しかし、それは 1 回しか発生しません)... それでも、top( 1) 反復回数が増えると増加するようです..無視カウントが高いブレークポイントを設定し、内部データ構造を調べて、それらが成長していないことを確認しました (私の状態のほとんどは vector< vector > にあります) が、それらはリサイクルされますそして、すべてのエントリは、しばらくしてもサイズ/容量 100 (初期のデフォルト) のベクトルでした。

おそらくgdbなどを使用して、増加するメモリトレースを調査できる方法は何ですか?

4

2 に答える 2

3

Ivella が提案するように、Valgrind を使用して (massif 経由で) ヒープのプロファイルを作成したり、(memcheck 経由で) メモリ リークやアクセス エラーをチェックしたりできます。動的メモリ割り当てを行わないと言いますが、 std::vector は動的メモリ割り当てを介してヒープに割り当てます。C++ 標準ライブラリが、プログラムの実行中にリサイクルされたヒープ メモリを常にオペレーティング システムに返すという保証はありません。したがって、有害な方法でリークすることなく、時間の経過とともにメモリ使用率がゆっくりと増加する可能性は十分にあります。

メモリ エラー/リーク チェックの場合:

valgrind --tool=memcheck <program to analyse>

ヒープ プロファイリングの場合:

valgrind --tool=massif <program to analyse>
于 2012-07-03T18:15:15.927 に答える
3

Linux を使用している場合は、すばらしいValgrindツールを使用できます。それをインストールし、-gフラグを付けてプログラムをコンパイルし、実行します

$ valgrind ./my_prog

印刷されたログを読むと、メモリ使用量の概要と、さらに詳しい情報を取得する方法が表示されます。

于 2012-07-03T18:09:26.250 に答える