サード パーティの API を使用するアプリケーションがあり、メモリ リークの問題が発生していると思われます。これをテストするための小さなテスト プログラム (以下) を作成しました。注意してください。両方ともVMIListener
、VMI
仮想インターフェイス メソッドを実装している API からのものです。
クラスのVMI vmi;
下でコメントアウトすると、メモリリークの動作はありません。VMITest
C++ の知識が限られているため、これは、仮想 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
}