Распределение памяти iOS - сколько памяти можно использовать в приложении? - PullRequest
37 голосов
/ 18 мая 2011

Использует ли IO несмежное или смежное распределение в управлении памятью?предположим, если пользователь выделит более 128 МБ, будет ли приложение закрыто?или память будет управляться iOS, как будто пользователь выделяет память и пропускает освобождение в методе Deallocate?Можно ли использовать более 120 МБ в приложении, используя четко определенную структуру данных?

Ответы [ 5 ]

73 голосов
/ 18 мая 2011

Блоки из отдельных выделений памяти не распределяются непрерывно (отдельные вызовы alloc, malloc, new и т. Д.). В противном случае они размещаются непрерывно (из того же вызова malloc, например, new float [30]). Согласно Apple, ваше приложение может быть закрыто для использования памяти, когда вы используете более 20 Мб оперативной памяти. На практике, однако, вы можете добраться до ...

  • 260 МБ ОЗУ на iPad 2 (спасибо RobCroll)
  • 170–180 МБ оперативной памяти на устройствах с общим объемом оперативной памяти 512 МБ (iPhone 4, iPod touch 4g)
  • 40-80 МБ оперативной памяти на устройствах с 256 МБ оперативной памяти (iPad, iPhone 3gs, iPod touch 3g)
  • 25 МБ на устройстве с только 128 МБ оперативной памяти (iPhone 3g, iPhone 2g, iPod touch 1g-2g)

Если вам действительно «нужно» столько оперативной памяти для мобильного приложения, вам следует действительно сохранить данные во временный файл и выполнить на нем обработку. Простой способ сделать это - использовать файлы, отображенные в памяти.

59 голосов
/ 17 марта 2015

Вы можете использовать память <емкость оперативной памяти вашего устройства </p>

(например, вы используете 40 МБ ОЗУ, а затем выделяете еще 80 МБ для некоторых коротких вычислений).В этом случае iOS немедленно убьет ваше приложение. 1

Список результатов, найденных пользователями, тестирующими с помощью этот инструмент :

устройство: (сумма сбоя / общая сумма / процент от общего числа) 2

  • iPad1: 127 МБ / 256 МБ / 49%
  • iPad2: 275 МБ / 512 МБ / 53%
  • iPad3: 645 МБ / 1024 МБ / 62%
  • iPad4: 585 МБ / 1024 МБ / 57% (iOS 8.1)
  • iPad Mini, 1-йПоколение: 297 МБ / 512 МБ / 58%
  • iPad Mini retina: 696 МБ / 1024 МБ / 68% (iOS 7.1)
  • iPad Air: 697 МБ / 1024 МБ / 68%
  • iPadAir 2: 1195 МБ / 2048 МБ / 58% (iOS 8.x)
  • iPad Pro 12.9: 3064 МБ / 3981 МБ / 77% (iOS 9.3.2)
  • iPad Pro 9.7 ": 1395 МБ /1971 МБ / 71% (iOS 10.0.2 (14A456))
  • iPod touch 4-го поколения: 130 МБ / 256 МБ / 51% (iOS 6.1.1)
  • iPod touch 5-го поколения: 286 МБ / 512 МБ/ 56% (iOS 7.0)
  • iPhone4: 325 МБ / 512 МБ / 63%
  • iPhone4S: 286 МБ / 512 МБ / 56%
  • iPhone5: 645 МБ / 1024 МБ / 62%
  • iPhone5S: 646MB / 1024 МБ / 63%
  • iPhone6: 645 МБ / 1024 МБ / 62% (iOS 8.x)
  • iPhone6 ​​+: 645 МБ / 1024 МБ / 62% (iOS 8.x)
  • iPhone6s: 1396 МБ / 2048 МБ / 68% (iOS 9.2)
  • iPhone6s +: 1195 МБ / 2048 МБ / 58% (теоретически, не проверено)
  • iPhoneSE: 1395 МБ / 2048 МБ / 69% (iOS 9,3)
  • iPhone 6s +: 1392 МБ / 2048 МБ / 68% (iOS 10.2.1)
  • iPhone 7+: 2040 МБ / 3072 МБ / 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

Более подробную информацию можно найти по этому вопросу .

2 голосов
/ 21 августа 2013

В настоящее время управление памятью в iOS работает без четкого ограничения памяти для приложения. Но вы можете справиться с ситуацией, когда iOS говорит вашему приложению немедленно освободить память или она будет закрыта.

Ответ на предупреждения о недостатке памяти в iOS

128 МБ - довольно большой блок памяти для iOS. в случае, если вы попытаетесь выделить больше памяти, приложение будет закрыто без каких-либо уведомлений.

2 голосов
/ 18 мая 2011

Под капотом iOS использует malloc и друзей для выделения памяти для каждого объекта, так что да, возвращаемая память действительно смежна.Если вы попытаетесь выделить больше доступной непрерывной памяти, вызов malloc вернет NULL (и, возможно, что-то еще не получится при попытке получить доступ к нулевому указателю, если не будет правильно проверено)

0 голосов
/ 18 мая 2011

Я не знаю, если лимит использования памяти приложения составляет 128 МБ или нет.Но если вы потребляете больше памяти, ваше приложение будет получать предупреждения о памяти.Если вы обработаете их и очистите кеш и другие объекты, которые сможете создать позднее, ваше приложение не закроется.Если вы проигнорируете их, ваше приложение закроется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...