iOS内存分配 - 应用程序可以使用多少内存?

时间:2011-05-18 11:46:46

标签: ios objective-c iphone memory-management

iOs是否在内存管理中使用非连续或连续的分配?假设用户分配的内容超过128 MB,应用程序是否会被关闭?或者内存将由iOS管理,就像用户分配内存并在Deallocate方法中错过deallocate一样?是否可以使用明确定义的数据结构分配在应用程序中使用超过120 MB?

5 个答案:

答案 0 :(得分:73)

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

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

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

答案 1 :(得分:59)

你可以使用内存<你的设备公羊容量

  

(例如,您使用40 Mb的RAM,然后再分配80 Mb以上   一些简短的计算)。在这种情况下,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第一代: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)
  •   

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

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

可在此question上找到更多信息。

答案 2 :(得分:2)

引擎盖下iOS使用malloc和friends为每个对象分配内存,所以返回的内存确实是连续的。如果您尝试分配超过可用的连续内存,则malloc调用将返回NULL(如果未正确检查,则尝试访问空指针时可能还会出现其他问题)

答案 3 :(得分:2)

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

Responding to Low-Memory Warnings in iOS

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

答案 4 :(得分:0)

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