1

サード パーティの API を使用するアプリケーションがあり、メモリ リークの問題が発生していると思われます。これをテストするための小さなテスト プログラム (以下) を作成しました。注意してください。両方ともVMIListenerVMI仮想インターフェイス メソッドを実装している API からのものです。

クラスのVMI vmi;下でコメントアウトすると、メモリリークの動作はありません。VMITestC++ の知識が限られているため、これは、仮想 VMI クラスに仮想デストラクタがないためだと思います。

ただし、私の質問は、メモリ リークからメモリを最大化するためのセーフガードが Windows に用意されているかどうかです。Windows タスク マネージャーで興味深い結果が表示されるためです。

テスト プログラムを実行すると、自動的に約 2 ギガ増加し、そこにとどまります (最初の白い円の領域)。実際のアプリケーション (2 番目の白い領域) を実行すると、リークはゆっくりとほぼ同じレベル (5.8 ギガ) に達し、どちらの場合もメモリをさらに増やすことなくそこで止まります。アプリケーションを実行させた他のいくつかのテストを実行すると、この特定のレベルのメモリ使用量に達するとリークが停止します。

メモリーインジケーター

void main(int cArgs, char* saArgs[])
{
     VMITest    *m_pVMI;

     while(true)
     {
         m_pVMI = new VMITest();
         delete m_pVMI;
         m_pVMI = NULL;
     }
 }


 class VMITest : public VMIListener
 {

    public:
           VMI  vmi;
           VMITest();

    // VMIListener interface methods.
 };

 class VMI_API VMI
 {
   public:
         VMI();
   //some more functions
 }
4

2 に答える 2

2

メモリ使用量の上限は、アプリケーションとプラットフォームによって異なります。詳細については、このMSDN の記事を確認してください。

アプリケーションにはメモリ リーク検出ツールが必要だと思います。Windows ではDebugDiagが最適で、無料です。

于 2013-11-11T17:07:22.490 に答える
1
于 2013-11-11T16:56:21.433 に答える