我有一个程序CRTDBG报告没有泄漏,但是,根据Windows任务管理器随着时间的推移占用更多内存。更糟糕的是,如果有足够的时间,它将在退出代码-1时崩溃。
这是一个将成为游戏引擎的程序,现在我正在测试通过快速加载和卸载级别来卸载级别的功能。这似乎是有效的,否则“最后”级别的实体将碰到当前的实体。当我正常运行程序并在退出前加载一级而不卸载时,内存不会增加。
可能需要注意的是,加载关卡需要从硬盘读取并打开文件。了解我正在使用Chipmunk物理库,Lua和OpenGL可能也很重要。
使这个问题变得最棘手的是CRTDBG不会转储的方式,它在main()的末尾返回0。
编辑:此外,使用Visual Studio 2008。
答案 0 :(得分:3)
对我而言,听起来你并没有真正泄露记忆,只是分配了很多,然后在出口处释放它。
也许你正在坚持一些你忘记在每个级别的加载之间释放/删除的对象列表?
答案 1 :(得分:0)
您可能正在观察“智能”分配器的影响,该分配器要求操作系统提供大量内存和子分配。您可以通过替换全局operator new
和operator delete
进行检查。如果那些告诉你所有分配的内存也被释放,但是进程的内存消耗增加或保持在那里,那么它(很可能)是分配器。
答案 2 :(得分:0)
Lua的垃圾收集器会在它感觉到的时候收集。如果你没有明确地命令Lua做一个集合,那么内存可能会在那里建立而不被实际使用。