我写了一个快速而又脏的程序,通过malloc反复调用来泄漏内存.我注意到当我在Debug配置中运行我的程序时(在VS 2012中),我的程序正确地消耗了千兆字节的内存并一直持续到页面文件已满(Windows任务管理器报告高工作集大小).但是,当我在发布模式下运行程序时,我的程序的工作集大小仍然很小,但是Commit大小一直在增长.磁盘抖动或页面错误也明显减少.
MSDN文档指出,当处于调试模式时,malloc映射到_malloc_dbg,但文档还声明两者都在堆上分配内存,只_malloc_dbg为调试信息分配额外的内存 - 没有提到不同的堆行为(即为什么它不显示在发布模式下的私人工作集中).
祈祷告诉,发生了什么?
提交虚拟内存页时,在访问页面之前不会分配任何物理内存.
调试malloc使用已知模式填充新分配的内存,而释放malloc不初始化它.
初始化导致调试所需的物理RAM页面(和更多抖动)比发布时更多.
如果你实际触摸分配的内存的每一页,我预计两个版本之间的大部分差异都会消失.
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |