我的应用程序运行了几个小时,任务管理器的任何值(vmsize,内存)都没有增加。但几个小时后,我得到了内存错误。
在 sysinternals 中,我看到“虚拟大小”在不断增加,当它达到 2 GB 左右时,我开始出现内存错误。
那是什么类型的内存泄漏? 我如何用代码演示它?是否可以使用任何内存值都没有增加但只有 sysinternsl 进程资源管理器中的虚拟大小增加的代码来重现相同的东西?
感谢任何建议
最佳答案
虚拟大小是进程分配的页数,那些 当前不在工作集中的页面(物理加载到 RAM 中)将在系统的页面文件中。
通常您分配未释放的内存。如果没有像 Rational Purify 或 Boundschecker 这样的特殊工具,这可能很难在代码中追踪。使用 sysinternals,您会发现肯定有泄漏,但它绝不会告诉您在哪里......
如果您的软件不是那么大,您可以尝试注销“新建”和“删除”,并通过管理已分配对象列表来查看内存中是否有太多对象(可以说是制作自己的内存调试器) . Windows 世界中有一些帮助程序,例如 CRT memory checking utils from Microsoft .它们在某些情况下很有用。
关于windows - sysinternals 进程资源管理器中的 "Virtual Size"是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3030274/