0

我想知道是否有经验法则来估计粗略的运行时内存使用情况。

那是我目前的“心理算法”:

  • 精灵框架表:例如 2048*2048= 大约 4MB 运行时间(我有 1 张用于 HUD 和输入精灵,1 用于玩家角色和子弹,1 用于敌人,1 用于背景,总共 16 MB)
  • mp3 背景音轨:音轨大小,例如一首 192kbps 3 分钟的歌曲需要 4 MB 这真的会扩展成 caf 并变得更大吗?
  • caf 文件:caf 文件的大小(我有大约 15 个 caf 文件,每个大约 300KB,所以总和为 4.5 MB)
  • 我倾向于忽略我分配的 CCSprite 子类的数量,但例如我可以将每个精灵相乘以获得我的 CCSprite 子类的平均大小(例如 .m 文件 45 KB = 41.270 字节和 .h 文件 4KB 总共 49KB 平均) :如果我使用带有 200 个子弹的 BulletCache 和带有 50 个
    精灵的 EnemyCache 以及大约 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 文件的文件大小来估计类实例的大小。这是完全错误的,因为您将 Apples(源代码、文本)与 Oranges(类对象、二进制文件)进行比较。但是你说得对,几乎在所有情况下都可以忽略类实例的大小。大多数 cocos2d 节点类实例使用少于 512 字节 - 仅计算类的 ivars 所需的内存。您可以使用class_getInstanceSize自己检查类实例的大小。

最后,这些类型的估算仅在您对应用程序的项目或功能有想法并且您需要估算资源使用情况以确保您不会分配千兆字节的内存时才有用。在所有其他情况下,使用 Instruments 监控应用程序的实际内存使用情况。

于 2013-03-05T21:43:45.183 回答