我有一个使用第三方API的应用程序,我认为它们存在内存泄漏问题。我写了一个小测试程序(如下)来测试它,请注意,VMIListener和VMI都来自我正在实现其虚拟接口方法的API。
如果我注释掉VMI vmi,我没有任何内存泄漏行为;在我的VMITest类下。由于我对C ++的了解有限,我认为这是因为虚拟VMI类没有虚拟析构函数。
但是,我的问题是窗口是否有一些保护措施可以最大限度地减少内存泄漏?因为我在Window任务管理器中看到了一个有趣的结果。
如果我运行我的测试程序,它会自动跳过大约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
}
答案 0 :(得分:2)
内存使用限制取决于您的应用程序和平台,有关详细信息,请查看此MSDN article。
我认为您的应用程序需要内存泄漏检测工具,DebugDiag在Windows上是一个不错的选择,它是免费的。
答案 1 :(得分:1)
在Windows 32位应用程序上,默认情况下,即使在64位Windows操作系统上也有2GB的地址空间。内存分配超过地址空间将失败。
可以使用/ LARGEADDRESSAWARE链接器选项将此限制扩展到32位窗口上的3GB或64位窗口上的4GB。