【问题标题】:Cocos2D and iOS: rule of thumb to estimate memory usageCocos2D 和 iOS:估计内存使用的经验法则
【发布时间】:2013-02-20 07:39:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: ios memory-management cocos2d-iphone runtime


【解决方案1】:

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

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

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

MP3 通常不会全部加载到内存中。 MP3 是一种流媒体格式。播放正常,只需少量内存缓冲区即可流式传输(播放)MP3。

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

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

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 2016-11-14
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2016-12-16
    • 2013-10-23
    相关资源
    最近更新 更多