環境:
- 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のリークを生き残るのは「割り当て」モードだけ
Static Analyzer は、ソースにリークがないことを報告します。[更新: 解決済み、Xcode5 の静的アナライザーは予想よりも悪い]
Instruments は、Mark Generations とともに、上記の Apple の 2 つの mem-mapping メソッドのみがリークしていると主張しています。[更新: 偶然: VBO のリークにより mach_vm_map がリークしていた]
チェックとして...私は参照を過剰に解放しました(たとえば、CGDataRefでCFRelease()が多すぎました)。予想されるクラッシュがすぐに発生しました。