
我的应用程序获取bad_allocexception。 资源监视器显示由OS(Commit)保留的虚拟内存超过了2G。 但是,进程(工作集)当前正在使用的虚拟内存非常小(在崩溃时它可能在200000 Kb左右)。 如何发生? 我注意到当程序启动的时候,这两个文件的大小基本相同(Commit提高一点)。 但随着时间的推移差异增长,在我看来,因为当第二个内存(工作集)增加,第一个(提交)也增加。 但是当第二个减less的时候,第一个不会回头。 我使用三台不同的电脑,到处都有这种行为。 我使用windows 7和程序是用C ++编写的。
什么可能导致这样的行为? 谢谢
windows API调用的内存泄漏问题 – Delphi
Valgrind检测内存泄漏而不终止程序
PHP尝试使用preg_match和preg_replace分配127 TB的内存和内存泄漏
C ++ Winsock接受内存泄漏/资源泄漏
我如何find哪个进程正在泄漏内存
这有时是由应用程序的内存分配模式造成的。 例如,如果您的数据结构始终在增长,并且延迟一段时间删除以前的缓冲区(那些空间不足的缓冲区),那么您可以用堆来观察这种行为。 这是因为当你的程序试图分配一个更大的内存块时,它在实际的缓冲区之前没有空间,所以它必须增加分配的堆来分配更大的块。 也许然后你删除旧的缓冲区,但堆已经增加。 也许甚至在另一个循环之后,你会使用释放的内存片段,这又不会为下一个更大的块留下足够的空间,等等,所以内存已经耗尽。
这将有助于从内存管理角度粗略描述程序的内部运作。
“工作集”是OS向应用程序显示的页面数量。 *** 作系统总是试图减少它。
如果你分配内存而不使用它,工作集将会很小。 但是分配的内存无论如何都要适应应用程序的虚拟地址空间。
总结以上是内存溢出为你收集整理的为什么保留的虚拟内存增长,而目前使用的虚拟内存不增长?全部内容,希望文章能够帮你解决为什么保留的虚拟内存增长,而目前使用的虚拟内存不增长?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)