2

语境:

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

观察到的:

  1. 通过 Apple 的 GLKViewController / GLKView 创建一个 OpenGL 表面
  2. 上传几何和纹理
  3. ...
  4. 丢弃 VC 和 V(它们释放)
  5. Apple 泄漏了数十(或数百)兆字节的 RAM。如果您在 1 点重新启动,您会因为内存不足而导致应用程序崩溃 :(
  6. 奖金:
    1. Apple 的 Instruments 在“泄漏”模式下 100% 重复崩溃。只有“分配”模式才能在 Apple 的泄漏中幸存下来

静态分析器报告源中没有泄漏。[更新:已解决,Xcode5 中的静态分析器比预期的要差]

Instruments 和 Mark Generations 声称只有上面列出的 Apple 的两种内存映射方法会泄漏。[更新:巧合:mach_vm_map 由于 VBO 泄露而泄露]

作为检查...我过度释放了引用(例如,CGDataRef 上的 CFRelease() 过多),它立即导致了预期的崩溃。

4

1 回答 1

0

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

父 NSObject 子类上的沼泽标准内存泄漏:丢失的版本 - Xcode4 会捕获。

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

于 2013-10-26T17:04:37.970 回答