Cocos2D和iOS:经验法则来估计内存使用情况

时间:2013-03-05 18:46:12

标签: ios memory-management cocos2d-iphone runtime

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

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

  • 精灵框架页:例如2048 * 2048 =大约4MB运行时间(HUD和输入精灵有1张,玩家角色和子弹1张,敌人1张,背景1张,总共16 MB)
  • mp3背景音轨:音轨的大小,例如4分贝为192kbps 3分钟的歌曲 这实际上会扩展到caf并变得更大吗?
  • caf文件:caf文件的大小(我有大约15个caf文件,每个约300KB,所以总和将是4.5 MB)
  • 我倾向于忽略我分配的CCSprite子类的数量但是例如我可以将每个sprite乘以我的CCSprite子类的平均大小(例如.m文件45 KB = 41.270字节和.h文件4KB总共49KB avarage): 如果我使用带有200发子弹的BulletCache和一个50左右的EnemyCache 精灵加上大约100个其他CCSprite子类(HUD,
    按钮,玩家精灵)简化总和可以是350。       所以我们有350 * 49KB = 17.150 KB,这是17 MB。

总共17 + 4.5 + 16 + 4 = 41.5 MB运行时内存使用

这是一种合理的估算方法吗?

1 个答案:

答案 0 :(得分:1)

我写了article about calculating / estimating the size of in-memory resources

你做了几个假设,其中一些是错误的。请允许我指出它们:

具有32位颜色的2048x2048使用完全 4 MB。在16位颜色深度,它将是一半。如果你制作纹理NPOT(推荐)并使用.pvr.ccz作为文件格式(也推荐),你可以修剪更多的内存。

MP3通常不会在内存中完整加载。 MP3是一种流式格式。播放正确,只需要少量的内存缓冲区来播放(播放)MP3。

您无法通过查看.h / .m文件的文件大小来估计类实例的大小。这是完全错误的,因为您将Apple(源代码,文本)与Oranges(类对象,二进制)进行比较。但你是对的,几乎在所有情况下都可以忽略类实例的大小。大多数cocos2d节点类实例使用少于512字节 - 只计算类'ivars所需的内存。您可以使用class_getInstanceSize自行检查类实例的大小。

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