1

有一个用 C++ 编写的大项目。一些 gui 操作(按钮单击)分配 2 MB 内存。这不是内存泄漏,当然内存稍后会被释放。但我需要调查分配了哪些对象以尝试减少内存分配大小。

所以我尝试使用 debug crt

OnBtnClick()
{
    //breakpoint1
    _CrtMemState s1;
    _CrtMemCheckpoint( &s1 );

        //The logic itself

    _CrtMemDumpAllObjectsSince(&s1);
    _CrtMemState s2;
    _CrtMemCheckpoint( &s2 );
    _CrtMemState s3;
    if ( _CrtMemDifference( &s3, &s1, &s2) )
        _CrtMemDumpStatistics( &s3 );
    //breakpoint2
}

调试报告说只分配了 400 KB。但是任务管理器中两个断点之间的进程内存增加了 2 MB。

因此,创建的转储是无用的。你能解释一下剩余的内存分配在哪里吗?

4

2 回答 2

2

尝试创建一个重载的全局 New 和 Delete 运算符,将每个请求记录到文件中的简单测试。您可以使用静态全局的状态打开/关闭日志记录。这将为您提供一个工具来记录您可以期望控制的每个内存分配。

于 2012-08-07T14:20:32.340 回答
0

看来我已经找到了问题的原因。

在按钮单击时,创建了几个 Richedit 窗口控件并填充了数据。Windows 可能会绕过运行时分配内存。所以我们在 dbgcrt 报告中看不到它的分配。但是当我关闭richedit句柄时,内存就成功释放了。

因此,我将尝试对所有按钮点击使用一个通用的 Richedit。

感谢大家的帮助!

于 2012-08-09T11:27:47.737 回答