GuardMalloc 导致虚拟内存耗尽
Posted
技术标签:
【中文标题】GuardMalloc 导致虚拟内存耗尽【英文标题】:GuardMalloc results in virtual memory exhausted 【发布时间】: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 好的,谢谢您的回复。 【参考方案1】:User1118321 是对的。 NSZombies 是造成这个问题的原因。
提交此答案以便可以接受答案。
【讨论】:
以上是关于GuardMalloc 导致虚拟内存耗尽的主要内容,如果未能解决你的问题,请参考以下文章