我有一个使用 3rd 方 API 的应用程序,我认为它们存在内存泄漏问题。我编写了一个小测试程序(如下)来测试这一点,请注意,两者VMIListener
都VMI
来自我正在实现其虚拟接口方法的 API。
VMI vmi;
如果我在我的VMITest
班级下注释掉,我没有任何内存泄漏行为。由于我对 C++ 的了解有限,我认为这是因为虚拟 VMI 类没有虚拟析构函数。
但是,我的问题是 Windows 是否有一些保护措施可以最大限度地防止内存泄漏?因为我在 Windows 任务管理器中看到了一个有趣的结果。
如果我运行我的测试程序,它会自动跳跃大约 2 Gigs 并停留在那里(第一个白色圆圈区域)。如果我运行我的实际应用程序(第二个白色区域),泄漏会慢慢达到大约相同的水平(5.8 Gig),并且在这两种情况下它们都会停在那里而不会进一步增加内存。我运行了其他几个测试,让我的应用程序运行,当它们达到这个特定的内存使用水平时,泄漏就会停止。
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
}