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のリークを生き残るのは「割り当て」モードだけ

Static Analyzer は、ソースにリークがないことを報告します。[更新: 解決済み、Xcode5 の静的アナライザーは予想よりも悪い]

Instruments は、Mark Generations とともに、上記の Apple の 2 つの mem-mapping メソッドのみがリークしていると主張しています。[更新: 偶然: VBO のリークにより mach_vm_map がリークしていた]

チェックとして...私は参照を過剰に解放しました(たとえば、CGDataRefでCFRelease()が多すぎました)。予想されるクラッシュがすぐに発生しました。

4

1 に答える 1