0

「windowsタスクマネージャー」プロセスタブでメモリが徐々に増加することを観察して、C++プログラムのメモリリーク(windows 7 OSを使用)を見つけたいと思います。「Windows タスク マネージャー」のプロセス タブに以下にリストしたメモリに関連する列がたくさんあるので、混乱しています。メモリ - ワーキング セット メモリ - ワーキング セット デルタ メモリ - プライベート ワーキング セット メモリ - コミット サイズ メモリ - ページ プール メモリ - 非ページ プール

これに関連するトピックを Web で検索しましたが、満足のいく回答が得られませんでした。

C++ コード\プロセスでメモリ リークが発生しているかどうかを判断できるように、メモリの増加をチェックするために使用するインジケーターを教えてください。

参考までに、私の制限は次のとおりです。プロファイリング ツールや静的コード アナライザー ツールを使用することはできず、メモリ リークを見つけるために Windows タスク マネージャーにしかアクセスできません。

4

3 に答える 3

4

他の投稿者が言っているように、ゆっくりと増加し、小さな増加は必ずしも問題を示しているわけではありません。

ただし、理論的に必要とされるよりもはるかに多くのメモリをゆっくりと消費する長時間実行プロセスがある場合 (または、同様の使用シナリオで正常なバージョンのコンポーネントで測定された場合) 、メモリ リークが発生している可能性があります。コンポーネントによるメモリのギガバイト使用量 (通常は約 2 ~ 3MB を使用) を報告する他の人によって、コンポーネントの問題に最初に気付きました。Perfmon は、プロセス メモリの長期的なビューを表示する場合に役立ちます。プロセスを名前で選択し、プライベート バイト測定を選択し、24 時間にわたって測定するタイミングとグリッドを設定できます。

プロセス メモリが確実に増加していることを確認したら、デバッガ、Valgrind、Parasoft、Glow Code などのツールを使用して、実際にメモリ リークが発生していることを確認できます。ただし、実際のメモリ リーク (参照されていないヒープ メモリ) ではない場合でも、メモリ使用量が際限なく増加している場合は、コンポーネントを再設計する必要があります。

于 2012-10-23T09:46:15.727 に答える
0

短い答え: それは不可能です。

タスク マネージャーだけを見ているだけでは、十分なデータが得られません。メモリ リークは通常、まだ割り当てられているが使用されていないメモリです。ただし、タスク マネージャーには、プロセスがまだそのメモリを使用しているように見えます (そして、それを見つける方法がありません)。メモリ使用量が継続的に増加していることに気付くかもしれませんが、それはメモリ リークが発生している可能性があることを示しているにすぎません。プログラムが実際にそのメモリを使用している (または将来の使用のためにそのメモリを保持している、たとえば独自のメモリ管理)。追加のツールを使用しないと、知ることはできません。

于 2012-10-23T09:25:14.007 に答える
0

リーク部分についての疑いを確認するには、例として Perfmon メモリ分析を使用できます -

Private Bytes は、実行可能ファイルが使用しているメモリ量の合理的な概算であり、メモリ リークの潜在的な候補のリストを絞り込むのに役立ちます。数値が絶え間なく絶え間なく増加している場合は、そのプロセスでリークが発生していないかどうかを確認する必要があります。ただし、これは漏れがあるかどうかを証明するものではありません。

詳細については、「プライベート バイト、仮想バイト、ワーキング セットとは」を参照してください。

于 2012-10-23T10:19:58.843 に答える