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

Dai*_*Dai 3 c malloc

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

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

祈祷告诉,发生了什么?

NPE*_*NPE 5

提交虚拟内存页时,在访问页面之前不会分配任何物理内存.

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

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

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