2

SO には、これに似た質問がいくつかありますが、デバイス上で iOS アプリによって使用される実際の OpenGL テクスチャ メモリを取得するための決定的なアプローチを説明しているようには見えません。

OpenGL にアップロードするときにテクスチャが使用するメモリ量を手動で計算する方法を知っています。デバイスから正確な OpenGL 使用メモリ量を取得できるかどうかを知りたいです。

Instruments の Memory Monitor ウィジェットで Real Memory 列と Virtual Memory 列を見ないようにしたいと思います (私の理解では、これらはテクスチャ メモリとアプリの通常のメモリを集約したものです)。これは、ここまたはここに示されているアプローチに似ていると思います。

テクスチャ メモリが外部ツールを使用して取得されるか、プログラムで取得されるかは気にしません。しかし、集計ではなく、デバイスによって報告された実際の OpenGL メモリだけが必要です。


また、「仮想メモリ」列が iOS で正確に何を意味するのか誰か説明できますか? Virtual Memoryの概念を理解していると思いますが、仮想メモリの列が iOS のメモリ不足の警告にも関連しているのか、それとも実メモリの列だけが関連しているのかを把握しようとしています。

4

1 に答える 1

4

私の答えは不完全ですが...

デバイスを接続し、プロジェクトを開いた状態で、シミュレータではなく実際のデバイスが実行ターゲットとして選択されていることを確認してください。製品 -> プロファイルを選択します。

楽器が出てきます。「OpenGL ES 分析」テンプレートを選択します。「OpenGL ES Analyzer」と「OpenGL ES Driver」の 2 つのインストゥルメントがアクティブな状態でインストゥルメントが開きます。

アナライザーの「i」をクリックし、「Uploaded Texture Bytes」にチェックマークを付けます。アップロードされたバイト数のグラフが表示されます。

Instruments の上部パネルと下部パネルの間の境界線の直後に、矢印型のボックスに「OpenGL ES Analyzer」というテキストが表示され、おそらく「Expert」という単語を指しているはずです。「エキスパート」をクリックし、「フレーム統計」を選択します。列の 1 つが「アップロードされたテクスチャ バイト」であるテーブルが表示されます。

面倒な部分は次のとおりです。これには、すべてのフレームでアップロードされたバイト数がリストされています。現在の居住者のコストを取得する方法や、その列で自動計算を行う方法はまだ見つかりません。ただし、Instruments の検査範囲 (ウィンドウのツールバーの時計ボタンで設定) にあるもののみが表示されるため、検査を特定の期間に制限してから、結果を自分で合計することができます。

編集:「仮想メモリ」列の正確な意味について 100% 断言することはできませんが (メモリ モニター ツールのことを指しているのでしょうか?)、iOS には完全に機能する仮想メモリ システムがあります。実行しない唯一のことは、データをディスクにページアウトすることです。ただし、ファイルをメモリ マップすることはできます。OS は通常の仮想アプローチを使用してメモリを割り当てる可能性があります。何mallocと共同。create は、アドレス空間のブロックを予約するチケットです。実際のメモリは、使用しない限り、または使用するまで、そのアドレス空間に配置されません。基本的に無料であるため、実際に使用しているよりもはるかに多くの仮想メモリが割り当てられる場合があります。すべての基盤オブジェクトが、実行中のメモリ管理システム用に最適化されていることは間違いありません。

于 2013-08-24T01:10:44.330 に答える