首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >另一个内存泄漏问题

另一个内存泄漏问题
EN

Stack Overflow用户
提问于 2010-05-30 17:30:11
回答 2查看 300关注 0票数 0

我的应用程序会持续运行4到6个小时,在此期间不会持续增加内存或任何类似的东西。

然后,4到6个小时后,我开始收到EOutofMemory异常。即使在那个时候,每个任务管理器也只使用了3GBRAM中的900MB。并且应用程序本身使用的内存不超过200MB。

那么为什么我会收到EOoutofMEmory错误?

这是否意味着内存泄漏在任务管理器中不一定可见?

Regagards

EN

回答 2

Stack Overflow用户

发布于 2010-05-30 19:59:35

使用Process Explorer而不是Task Manager来查看应用程序的内存消耗。

  • 私有字节:是您的应用程序使用的内存量。这也是任务管理器在VM大小列中显示的值(在XP下)
  • 虚拟内存大小:这是您的应用程序当前使用的最大地址。此值受2 GB的限制(对于32位操作系统中的32位应用程序)。

私有字节和虚拟内存大小的不同是由内存碎片引起的。你唯一能做的就是使用内存管理器来减少碎片,比如使用内存池。

DougLea内存管理器是一个免费的替代方案。也有商业内存管理器。您还可以尝试编写自己的内存管理器(这并不难:您只需覆盖new和delete操作符)。

还有一些技巧可以提高2 GB的限制。如果你用/LARGEADDRESSAWARE标志链接你的应用程序,你的应用程序将能够分配3 3GB的内存(如果XP是用/3GB标志启动的,对于Vista/W7可能有一个类似的标志,但我不知道这个)。在64位操作系统上,LargeAddressAware可执行文件甚至可以使用多达4 GB的内存。

票数 1
EN

Stack Overflow用户

发布于 2010-05-30 17:43:28

这可能是由内存碎片引起的。当应用程序长时间运行时,内存可能会被碎片化,这意味着它被许多小的已分配块和空闲空间所填充。如果要分配大于最大可用块的内存块,则分配将失败,即使可用空间总量表明有足够的内存可以成功分配也是如此。

您可能还想检查一下,您是否在某个时刻无意中尝试分配了大量内存块。

我建议您检查失败的分配的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2938091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档