【问题标题】:iOS memory allocation - how much memory can be used in an application? [duplicate]iOS 内存分配——一个应用程序可以使用多少内存?
【发布时间】:2011-08-27 23:59:18
【问题描述】:

iO 在内存管理中使用非连续分配还是连续分配?假设如果用户分配超过 128 MB,App 会被关闭吗?或者内存将由 iOS 管理,就好像用户在 Deallocate 方法中分配内存并错过了释放一样?使用定义良好的数据结构分配是否可以在应用程序中使用超过 120 MB 的空间?

【问题讨论】:

    标签: ios objective-c iphone memory-management


    【解决方案1】:

    您可以使用内存

    (例如,您使用 40 Mb 的 RAM,然后为 一些简短的计算)。在这种情况下,iOS 会杀死你的应用程序 立即。1

    用户使用this tool测试发现的结果列表:

    设备:(崩溃量/总量/占总量的百分比)2

    • iPad1:127MB/256MB/49%
    • iPad2:275MB/512MB/53%
    • iPad3:645MB/1024MB/62%
    • iPad4:585MB/1024MB/57% (iOS 8.1)
    • iPad Mini 第 1 代:297MB/512MB/58%
    • iPad Mini 视网膜:696MB/1024MB/68% (iOS 7.1)
    • iPad Air:697MB/1024MB/68%
    • iPad Air 2:1195MB/2048MB/58% (iOS 8.x)
    • iPad Pro 12.9:3064MB/3981MB/77% (iOS 9.3.2)
    • iPad Pro 9.7":1395MB/1971MB/71%(iOS 10.0.2 (14A456))
    • iPod touch 第 4 代:130MB/256MB/51% (iOS 6.1.1)
    • iPod touch 第 5 代:286MB/512MB/56% (iOS 7.0)
    • iPhone4:325MB/512MB/63%
    • iPhone4S:286MB/512MB/56%
    • iPhone5:645MB/1024MB/62%
    • iPhone5S:646MB/1024MB/63%
    • iPhone6:645MB/1024MB/62% (iOS 8.x)
    • iPhone6+:645MB/1024MB/62% (iOS 8.x)
    • iPhone6s:1396MB/2048MB/68% (iOS 9.2)
    • iPhone6s+:1195MB/2048MB/58%(理论值,未经测试)
    • iPhoneSE:1395MB/2048MB/69% (iOS 9.3)
    • iPhone 6s+:1392MB/2048MB/68% (iOS 10.2.1)
    • iPhone 7+:2040MB/3072MB/66% (iOS 10.2.1)
    • iPhone X:1392/2785/50% (iOS 11.2.1)

    1https://stackoverflow.com/a/5887783/5181636

    2https://stackoverflow.com/a/15200855/5181636

    更多信息可以在question找到。

    【讨论】:

    • 伟大的迪彭。很有帮助。
    • 我测试了两款主列表中缺少的设备:* iPhone 6s+:1392MB/2048MB/68% (iOS 10.2.1) * iPhone 7+:2040MB/3072MB/66% (iOS 10.2) .1)
    【解决方案2】:

    目前 iOS 中的内存管理在没有明确的应用程序内存限制的情况下工作。 但是当 iOS 告诉你的应用程序立即释放内存或者它将被关闭时,你可以处理这种情况。

    Responding to Low-Memory Warnings in iOS

    128MB 对于 iOS 来说是一个相当大的内存块。如果您尝试分配超过内存限制,应用程序将在没有任何通知的情况下关闭。

    【讨论】:

      【解决方案3】:

      来自不同内存分配的块不是连续分配的(对 alloc、malloc、new 等的单独调用)。否则,它们将连续分配(来自对 malloc 的同一次调用,例如 new float[30])。根据 Apple 的说法,当您使用超过 20mb 的内存时,您的应用程序可能会因内存使用而被关闭。然而,在实践中,您可以达到大约...

      • iPad 2 上 260 MB 内存(感谢 RobCroll)
      • 在总内存为 512 Mb 的设备(iPhone 4、iPod touch 4g)上的内存为 170-180MB
      • 内存为 256 MB 的设备(iPad、iPhone 3gs、iPod touch 3g)上的内存为 40-80MB
      • 只有 128MB 内存的设备上 25 MB(iPhone 3g、iPhone 2g、iPod touch 1g-2g)

      如果您真的“需要”移动应用程序这么多内存,您应该真正将数据保存到临时文件并对其进行处理。一个简单的方法是使用内存映射文件。

      【讨论】:

      • 有没有苹果规范文件?
      • 因为你已经给出了限制..(170-180MB 的 RAM)
      • 没有,那只是我的个人经历。
      • 你应该指导我们如何准确地释放内存。你只是在告诉一些 mb 问题。因为我正面临这个问题并且没有意识到它。我想和instagrampicyou 其他应用程序一样..
      • @Hrushikesh 这不是问题要问的。你不应该为此投票给我。
      【解决方案4】:

      在底层,iOS 使用 malloc 和朋友为每个对象分配内存,所以是的,返回的内存确实是连续的。如果您尝试分配超过可用的连续内存,malloc 调用将返回 NULL(如果未正确检查,尝试访问空指针时可能会失败)

      【讨论】:

        【解决方案5】:

        我不知道应用程序内存使用限制是否为 128 MB。但是,如果您消耗更多内存,您的应用程序将收到内存警告。如果您处理它们并清除缓存和您可以在以后创建的其他对象,您的应用程序将不会退出。如果您忽略它们,您的应用程序将退出。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-31
          • 1970-01-01
          • 1970-01-01
          • 2014-03-02
          • 2020-03-12
          • 2015-12-03
          • 1970-01-01
          • 2012-10-22
          相关资源
          最近更新 更多