C ++堆状态差异

有一个用C ++编写的大项目。 一些gui动作(button点击)分配2 MB的内存。 这不是内存泄漏,当然内存将被释放。 但是我需要调查什么对象被分配来试图减less内存分配的大小。

所以我试图使用debuggingcrt

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 } 

debugging报告说只有400 KB被分配。 但任务pipe理器中的2个断点之间的进程内存增加了2 MB。

所以,创build的转储是无用的。 你能解释一下剩下的内存分配情况吗?

尝试一个简单的测试,创建一个重载的全局新和删除操作符,记录每个请求到一个文件。 您可以使用静态全局的状态来打开/关闭日志记录。 这将给你一个工具来记录你可以控制的每个内存分配。

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

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

所以,我会尝试使用一个共同的财富为所有按钮点击。

谢谢大家的帮助!