c - malloc在发布与调试(vc2012)

  • 本文关键字:调试 vc2012 malloc malloc
  • 更新时间 :
  • 英文 :


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

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

请告诉我发生了什么事?

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新