sysinternals进程资源管理器中的"虚拟大小"是什么

rob*_*ert 14 memory windows virtual-memory

我的应用程序运行了几个小时,任务管理器的任何值(vmsize,内存)都没有增加.但几个小时后,我出现内存错误.

在sysinternals中,我看到"虚拟大小"正在不断增加,当它达到2 GB左右时,我开始出现内存错误.

那是什么样的内存泄漏?我如何用代码演示它?是否有可能用任何代码片段重现相同的内容,其中没有内存值增加但只有sysinternsl进程资源管理器中的虚拟大小增加?

谢谢你的任何建议

jde*_*aan 8

虚拟大小是进程分配的页数,当前不在工作集中的页(物理加载到RAM中)将位于系统的页面文件中.

通常,您分配未释放的内存.如果没有像Rational Purify或Boundschecker这样的特殊工具,这很难在代码中找到.使用sysinternals,你会看到必须有泄漏,但绝不会告诉你在哪里......

如果您的软件不是那么大,您可以尝试注销"新"和"删除",并通过管理已分配对象的列表来查看内存中是否有太多对象(可以这样说出您自己的内存调试器).Windows世界中有一些助手,比如微软CRT内存检查工具.它们在某些情况下很有用.


Jer*_*fin 5

从情况来看,您的地址空间即将耗尽。32 位 Windows 将地址空间一分为二,一半用于用户程序,一半用于系统,因此每个地址空间为 2 GB。

造成这种情况的最常见原因是内存空间碎片化,以至于您无法找到足够大的块来进行分配。不幸的是,如果不更多地了解您正在做什么,就很难猜测为什么会发生这种情况。