发布与调试中的malloc(VC 2012)

时间:2013-03-23 18:41:04

标签: c malloc

我写了一个快速而又脏的程序,通过反复调用malloc来泄漏内存。我注意到当我在Debug配置中运行我的程序时(在VS 2012中),我的程序正确地消耗了千兆字节的内存并一直持续到页面文件已满(Windows任务管理器报告高工作集大小)。但是,当我在发布模式下运行程序时,我的程序的工作集大小仍然很小,但是Commit大小一直在增长。磁盘抖动或页面错误也明显减少。

MSDN文档指出,当处于调试模式时,malloc被映射到_malloc_dbg,但是文档还指出两者都在堆上分配内存,只有_malloc_dbg分配额外的内存调试信息 - 没有提到不同的堆行为(即为什么它不会出现在发布模式下的私有工作集中)。

祈祷告诉,发生了什么事?

1 个答案:

答案 0 :(得分:5)

提交虚拟内存页面时,no physical memory is allocated直到访问该页面。

调试malloc用已知模式填充新分配的内存,而释放malloc不初始化它。

初始化会导致调试所需的物理RAM页面(以及更多抖动)比发布时更多。

如果您要实际触摸已分配内存的每一页,我预计两个版本之间的大部分差异都会消失。