【发布时间】:2012-08-04 10:30:44
【问题描述】:
有一个用 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。
因此,创建的转储是无用的。你能解释一下剩余的内存分配在哪里吗?
【问题讨论】:
-
下划线大写的名称是保留,在你的程序代码中自己编造会使你的程序格式错误。
-
@KerrekSB:除非他们是provided by the implementation;这只会使您的程序不可移植。
-
C 库不向操作系统请求每个对象的内存分配,因此它可能有一些“库存”未使用的内存。
-
@MikeSeymour:谢谢,已修复:-)
-
您是如何计算分配 2MB 的 gui 操作的?来自任务管理器?
标签: c++ windows heap-memory allocation application-verifier