Iphone 内存警告,但活动字节很小

Iphone 内存警告,但活动字节很小,iphone,memory-management,memory-leaks,crash,instruments,Iphone,Memory Management,Memory Leaks,Crash,Instruments,在我的应用程序中,在多次重复某些操作(选择图片+处理)之后,我得到一个1级和2级的内存警告,然后崩溃 泄漏工具没有显示任何泄漏。我还遵循Instruments中的分配工具,我的活动字节大约为4MB,总的来说我分配了113MB。当图片加载时,我的最大内存可能是20MB 因为我必须重复一个动作才能到达崩溃点,所以很可能是内存泄漏。但是,我不知道如何定位它,因为我的活动字节是4MB,并且应该分配一些东西(除了UIImagePickerController中约100KB的小泄漏) 我可以信任多少内存泄漏

在我的应用程序中,在多次重复某些操作(选择图片+处理)之后,我得到一个1级和2级的内存警告,然后崩溃

泄漏工具没有显示任何泄漏。我还遵循Instruments中的分配工具,我的活动字节大约为4MB,总的来说我分配了113MB。当图片加载时,我的最大内存可能是20MB

因为我必须重复一个动作才能到达崩溃点,所以很可能是内存泄漏。但是,我不知道如何定位它,因为我的活动字节是4MB,并且应该分配一些东西(除了UIImagePickerController中约100KB的小泄漏)


我可以信任多少内存泄漏/分配工具?您有什么建议可以帮我找到问题的原因吗?

我不知道iPhone操作系统是如何工作的,所以这基本上只是猜测,但在没有垃圾收集器压缩堆内存的系统中,它会随着时间的推移而碎片化。拥有大量空闲内存并不意味着大量连续内存是空闲的

例如,如果某些处理总是需要4MB内存,并且您有以下分配模式:

  • 分配4MB
  • 分配1KB
  • 免费4MB
  • 分配1KB
(您不会释放1KB块,因为这是计算结果或其他任何东西)

最终可能只有3999k的可用连续内存—因此下次分配4MB时,它将位于间隙之后,即使它几乎适合。这意味着您可能会耗尽内存,即使几乎整个内存(或者更确切地说,寻址空间)都是可用的


诚然,现代系统不应该遇到这个问题,但它们可能会遇到,特别是当应用程序从未关闭并且没有压缩垃圾收集器时。请注意,某些系统的碎片堆较低,特别是在这种情况下(重新分配和释放相同大小的块),但通常需要显式请求它。

我认为这不是原因。我没有经常重复我的操作,导致如此多的碎片。出于好奇,iPhone中的iPhone/a进程有多少可用内存?我以前尝试过重新启动iPhone,所以我猜它有全部可用内存,大约160 MB。25 MB是一个应用程序的限制