0

粗い実行時のメモリ使用量を見積もる経験則があるかどうか疑問に思っていました。

それが私の現在の「メンタルアルゴリズム」です。

  • スプライト フレーム シート: 例: 2048*2048= 約 4MB ランタイム (HUD と入力スプライト用に 1 シート、プレイヤー キャラクターと弾丸用に 1 シート、敵用に 1 シート、背景用に 1 シート、合計 16 MB あります)
  • mp3 バックグラウンド トラック: トラックのサイズ、たとえば 192kbps の 3 分間の曲で 4 MB これは実際に caf に拡張されて大きくなりますか?
  • caf ファイル: caf ファイルのサイズ (それぞれ約 300 KB の約 15 個の caf ファイルがあるため、合計は 4.5 MB になります)
  • 私は割り当てる CCSprite サブクラスの数を無視する傾向がありますが、たとえば、CCSprite サブクラスの平均サイズに対して各スプライトを掛けることができます (たとえば、.m ファイル 45 KB = 41.270 バイトと .h ファイル 4KB で合計 49KB 平均)。 : BulletCache を 200 個の弾丸で使用し、EnemyCache を 50 個
    のスプライトと約 100 個の他の CCSprite サブクラス (HUD、
    ボタン、プレイヤー スプライト) で使用すると、単純化した合計は 350 になる可能性があります。したがって、350 * 49KB = 17.150 KB となり、およそ 17 MB になります。

したがって、合計 17 + 4.5 + 16 + 4 = 41.5 MB の実行時メモリ使用量

これは、推定するのに十分合理的な方法でしょうか?

4

1 に答える 1

1

インメモリ リソースのサイズの計算/見積もりに関する記事を書きました。

あなたはいくつかの仮定をしますが、それらのいくつかは間違っています。それらを指摘させてください:

32 ビット カラーの 2048x2048 は、ちょうど4 MB を使用します。16 ビットの色深度では、その半分になります。テクスチャを NPOT にし (推奨)、ファイル形式として .pvr.ccz を使用すると (これも推奨)、さらに多くのメモリを削減できます。

MP3 は通常、メモリに完全に読み込まれるわけではありません。MP3 はストリーミング形式です。適切に再生すると、MP3 をストリーミング (再生) するために必要なメモリ バッファーはわずかです。

.h/.m ファイルのファイル サイズを見て、クラス インスタンスのサイズを見積もることはできません。リンゴ (ソース コード、テキスト) とオレンジ (クラス オブジェクト、バイナリ) を比較しているため、これは完全に間違っています。しかし、ほとんどの場合、クラス インスタンスのサイズを無視できることは間違いありません。ほとんどの cocos2d ノード クラス インスタンスは、クラスの ivar に必要なメモリをカウントするだけで、512 バイト未満しか使用しません。class_getInstanceSizeを使用して、クラス インスタンスのサイズを自分で確認できます。

最後に、これらの種類の見積もりは、アプリのプロジェクトまたは機能のアイデアがあり、ギガバイトのメモリを割り当てないことを確認するためだけにリソース使用量を見積もる必要がある場合にのみ役立ちます。それ以外の場合は、Instruments を使用してアプリの実際のメモリ使用量を監視します。

于 2013-03-05T21:43:45.183 に答える