さまざまな _CRTMem* 関数を使用して、コード内のメモリ リークを見つけようとしました。アプリケーションはアンマネージ C++ アプリケーションです。私が気づいたいくつかの奇妙なこと:
- タスク マネージャーによって報告されるメモリ使用量の増加 (私はその "コミット サイズ" メトリックを使用します) と、CRT ヒープ デバッガー関数 _CrtMemCheckpoint()、_CrtMemDifference()、および _CrtMemDumpStatistics() を使用して報告されるメモリ使用量の増加との間には、大きな相違があります。報告されたメモリ使用量の増加は、200KB (タスク マネージャー) と 17 KB (CRT ヒープ デバッガー) です。ウィンドウがバックグラウンドで余分なメモリを割り当てている可能性はありますか? それは大きな矛盾のように思えます。
- _CRTDBG_MAP_ALLOC #define と関数 _CrtMemDumpAllObjectsSince() を使用して、メモリ リーク ファイルの場所を取得しています。ただし、リークの約 75% では、ファイルの場所に関する情報が利用できません。これは、余分な割り当てが舞台裏で行われていることも示していますか?
Windows 7 を使用してテストしますが、最終的な宛先アプリケーションは Windows CE で実行されます。WindowsCE はより優れた (または異なる) メモリ管理を備えていますか?
誰でも助けることができますか?どうもありがとう、ポール