语境:
- iOS 上的 OpenGL ES 2.0
- Apple 的 glBufferData 实现使用 mach_vm_map (不可避免? - 它在 Apple 的 GL 驱动程序中)[更新:已解决,这是不相关的问题]
- Apple 的 CGDataProviderCopyData 实现使用 mmap(不可避免? - 它是 Apple 系统 API)
观察到的:
- 通过 Apple 的 GLKViewController / GLKView 创建一个 OpenGL 表面
- 上传几何和纹理
- ...
- 丢弃 VC 和 V(它们释放)
- Apple 泄漏了数十(或数百)兆字节的 RAM。如果您在 1 点重新启动,您会因为内存不足而导致应用程序崩溃 :(
- 奖金:
- Apple 的 Instruments 在“泄漏”模式下 100% 重复崩溃。只有“分配”模式才能在 Apple 的泄漏中幸存下来
静态分析器报告源中没有泄漏。[更新:已解决,Xcode5 中的静态分析器比预期的要差]
Instruments 和 Mark Generations 声称只有上面列出的 Apple 的两种内存映射方法会泄漏。[更新:巧合:mach_vm_map 由于 VBO 泄露而泄露]
作为检查...我过度释放了引用(例如,CGDataRef 上的 CFRelease() 过多),它立即导致了预期的崩溃。