防止iOS在mmap上泄漏内存(is:mach_vm_map)

时间:2013-10-26 16:27:03

标签: ios memory-management opengl-es memory-leaks

上下文:

  • iOS上的OpenGL ES 2.0
  • Apple的glBufferData实现使用mach_vm_map(不可避免? - 它在Apple的GL驱动程序中)[更新:已解决,这是无关的问题]
  • Apple的CGDataProviderCopyData实现使用mmap(不可避免? - 它是Apple系统API)

观察到的:

  1. 通过Apple的GLKViewController / GLKView
  2. 创建一个OpenGL表面
  3. 上传几何体和纹理
  4. ...
  5. 丢弃VC和V(他们dealloc)
  6. Apple泄漏了数十(或数百)兆字节的RAM。如果从1重新启动,则由于内存不足而导致应用程序崩溃:(
  7. 奖金:
    1. Apple的仪器在“泄漏”模式下可重复100%崩溃。只有“Allocations”模式能够幸免于Apple的泄密
  8. 静态分析器报告源中没有泄漏。 [更新:已解决,Xcode5中的静态分析器比预期更差]

    与Mark Generations合作的乐器声称,上面列出的Apple的两种内存映射方法正在泄露。 [更新:巧合:由于泄漏的VBO,mach_vm_map正在泄漏]

    作为一个检查...我过度释放了引用(例如,CGDataRef上的CFRelease()曾经过多),并且它立即引起了预期的崩溃。

1 个答案:

答案 0 :(得分:0)

对于mach_vm_map,事实证明:Xcode5的静态分析器坏了:(。

父NSObject子类上的bog标准内存泄漏:缺少版本 - Xcode4会捕获。

对于mmap - 我仍然找不到让Apple发布mmap的方法:(。