增加内存使用量而不泄漏?

时间:2011-06-18 19:50:27

标签: c++ memory-leaks

我有一个程序CRTDBG报告没有泄漏,但是,根据Windows任务管理器随着时间的推移占用更多内存。更糟糕的是,如果有足够的时间,它将在退出代码-1时崩溃。

这是一个将成为游戏引擎的程序,现在我正在测试通过快速加载和卸载级别来卸载级别的功能。这似乎是有效的,否则“最后”级别的实体将碰到当前的实体。当我正常运行程序并在退出前加载一级而不卸载时,内存不会增加。

可能需要注意的是,加载关卡需要从硬盘读取并打开文件。了解我正在使用Chipmunk物理库,Lua和OpenGL可能也很重要。

使这个问题变得最棘手的是CRTDBG不会转储的方式,它在main()的末尾返回0。

编辑:此外,使用Visual Studio 2008。

3 个答案:

答案 0 :(得分:3)

对我而言,听起来你并没有真正泄露记忆,只是分配了很多,然后在出口处释放它。

也许你正在坚持一些你忘记在每个级别的加载之间释放/删除的对象列表?

答案 1 :(得分:0)

您可能正在观察“智能”分配器的影响,该分配器要求操作系统提供大量内存和子分配。您可以通过替换全局operator newoperator delete进行检查。如果那些告诉你所有分配的内存也被释放,但是进程的内存消耗增加或保持在那里,那么它(很可能)是分配器。

答案 2 :(得分:0)

Lua的垃圾收集器会在它感觉到的时候收集。如果你没有明确地命令Lua做一个集合,那么内存可能会在那里建立而不被实际使用。