当程序抛出内存不足异常时我查看了进程(如下图所示),发现有很多未提交的私有内存空间。这种行为的原因是什么?
几年前我也遇到了这样的问题。原因是链接器选项中的“使用动态库”未选中。当我重新选中它时,问题消失了,反之亦然。我制作的测试应用程序只是调用“new char[1000000]”,然后删除它。每次都释放了内存(在 Windows 任务管理器中没有已提交内存的上升),但是一段时间后我就会遇到内存不足问题,VMMap 显示完全相同的情况。有很多保留的私有内存,但其中大部分未提交。
现在问题又出现了,但我不能用同样的方法解决它。我不知道是否是原因,但我在同一台机器上安装了 Builder 6 和 2010。现在我只有 Builder 6,似乎无法像以前那样使用测试应用程序重现错误。无论如何,似乎存在某种内存管理器错误或其他问题。CodeGuard 没有显示任何内存泄漏。使用“new”创建内存块时,“内存提交大小”会立即显示出来,当删除内存时内存使用量会减少,因此我认为内存泄漏不是问题,任务管理器并没有显示出很多“内存提交大小”。
我是否能做些什么?是否有任何方法可以释放未提交的内存?如何进一步诊断问题?
屏幕截图: http://i.stack.imgur.com/UKuTZ.jpg