3

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

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

求大神告知,怎么回事?

4

1 回答 1

5

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

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

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

如果您要真正触摸分配内存的每一页,我希望两个构建之间的大部分差异都会消失。

于 2013-03-23T18:42:22.937 回答