0

さまざまな _CRTMem* 関数を使用して、コード内のメモリ リークを見つけようとしました。アプリケーションはアンマネージ C++ アプリケーションです。私が気づいたいくつかの奇妙なこと:

  • タスク マネージャーによって報告されるメモリ使用量の増加 (私はその "コミット サイズ" メトリックを使用します) と、CRT ヒープ デバッガー関数 _CrtMemCheckpoint()、_CrtMemDifference()、および _CrtMemDumpStatistics() を使用して報告されるメモリ使用量の増加との間には、大きな相違があります。報告されたメモリ使用量の増加は、200KB (タスク マネージャー) と 17 KB (CRT ヒープ デバッガー) です。ウィンドウがバックグラウンドで余分なメモリを割り当てている可能性はありますか? それは大きな矛盾のように思えます。
  • _CRTDBG_MAP_ALLOC #define と関数 _CrtMemDumpAllObjectsSince() を使用して、メモリ リーク ファイルの場所を取得しています。ただし、リークの約 75% では、ファイルの場所に関する情報が利用できません。これは、余分な割り当てが舞台裏で行われていることも示していますか?

Windows 7 を使用してテストしますが、最終的な宛先アプリケーションは Windows CE で実行されます。WindowsCE はより優れた (または異なる) メモリ管理を備えていますか?

誰でも助けることができますか?どうもありがとう、ポール

4

1 に答える 1

2

タスク マネージャーは以前は実際の数値を表示していましたが、Vista (と思います) 以降は、「簡略化された」レポートを報告するように変更されました。これは、技術者ではないユーザーがシステムで何が起こっているかを理解するのに十分であっても、深刻な作業には役に立ちません。

いくつかの変更点を説明する記事を次に示します。

メモリを測定する場合は、多くのメモリ カウンタの 1 つ、またはプロセス オブジェクトのメモリ カウンタで perfmon を使用します。これらは、必要な生データを提供します。

于 2013-05-27T13:29:05.107 に答える