我的应用程序运行了几个小时,任务管理器的任何值( vmsize、内存)都没有增加。但是几个小时后,我得到了内存不足的错误。
在sysinternals中,我看到“虚拟大小”在不断增加,当它达到大约2 GB时,我开始收到内存错误。
那么这是一种什么样的内存泄漏呢?我如何用代码来演示它呢?在sysinternsl进程资源管理器中,任何内存值都没有增加,但只有虚拟大小增加的代码,有可能重现相同的情况吗?
感谢您的建议
发布于 2010-06-13 06:26:18
虚拟大小是进程已分配的页数,当前不在工作集中(物理加载到RAM中)的那些页将在系统的页文件中。
通常情况下,分配的内存不是已释放的。如果没有特殊的工具,例如Rational Purify或Boundschecker,这可能很难在代码中追踪到。在sysinternals中,你可以看到肯定有漏洞,但它绝不会告诉你在哪里……
如果您的软件不是很大,您可以尝试注销"new“和"delete”,并通过管理已分配对象的列表来查看内存中是否有太多对象(可以这么说,制作自己的内存调试器)。windows世界中有一些像CRT memory checking utils from Microsoft这样的帮助器。它们在某些情况下很有用。
发布于 2010-06-13 06:20:24
从声音上看,您的地址空间快用完了。32位Windows将地址空间一分为二,一半用于用户程序,另一半用于系统,因此每个地址空间都有2 in。
最常见的原因是将内存空间碎片化,以至于找不到足够大的块来进行分配。不幸的是,如果不知道你在做什么,很难猜测为什么会发生这种情况。
发布于 2010-06-13 06:30:12
根据sysinternals论坛上的this thread,虚拟大小对应于进程的地址空间(我猜是提交和保留的内存页)
https://stackoverflow.com/questions/3030274
复制相似问题