【问题标题】:GuardMalloc results in virtual memory exhaustedGuardMalloc 导致虚拟内存耗尽
【发布时间】:2012-12-09 13:22:13
【问题描述】:

由于看起来内存不足或内存损坏情况,我们的应用偶尔会在现场遇到崩溃(通过 BugSense 发现),因此为了帮助我追踪它们,我启用了以下功能:

  • Malloc 涂鸦
  • Malloc 保护边缘
  • 守卫马洛克
  • Objective-C 僵尸对象
  • Malloc 堆栈日志记录
  • 日志异常。

在模拟器中与应用交互一段时间后(不到 30 秒),显示以下消息:

GuardMalloc[TrafficDemoEmp-2430]: allocate_pages(): virtual memory exhaused!
GuardMalloc[TrafficDemoEmp-2430]: expandUniquingTable(): VMCopyFailed
GuardMalloc[TrafficDemoEmp-2430]: allocate_pages(): virtual memory exhaused!
GuardMalloc[TrafficDemoEmp-2430]: expandUniquingTable(): VMCopyFailed

禁用 Guard Malloc 后,应用可以正常工作,但启用后,应用会因这些消息而崩溃。当我使用 Leaks and Allocations 工具进行分析时,没有发现任何泄漏,并且所有内存的 Live Bytes 值介于 30 MB 和 80 MB 之间(取决于它当时正在做什么)。当然,对于一个应用来说,这并不是太多的内存。

但是,这些消息表明我的应用程序使用了太多内存,但我不确定是什么导致了虚拟内存耗尽。 Xcode 中是否有其他可用的工具或调试器设置来提供帮助?

谢谢,
大卫

【问题讨论】:

  • NSZombies 会导致你释放的任何东西实际上都没有被释放,因此如果你进行大量分配会耗尽内存。
  • 禁用僵尸解决了这个问题。谢谢。
  • 嗨,同样的问题也存在,并通过禁用僵尸解决了......谢谢。但我不明白它的影响,你能解释一下吗?
  • @OKNC2 因为实际上并没有释放任何东西,所以内存不可避免地会被释放。
  • @DavidPotter 好的,谢谢您的回复。

标签: ios xcode memory memory-management memory-leaks


【解决方案1】:

User1118321 是对的。 NSZombies 是造成这个问题的原因。

提交此答案以便可以接受答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2011-05-06
    • 1970-01-01
    • 2017-12-16
    • 2011-04-12
    • 2019-05-16
    • 1970-01-01
    相关资源
    最近更新 更多