Asignación de memoria iOS: ¿cuánta memoria se puede usar en una aplicación?

¿Utiliza iOs asignación no contigua o contigua en la gestión de memoria? supongamos que si el usuario asigna más de 128 MB, ¿se cerrará la aplicación? o la memoria será administrada por iOS como si el usuario asignara memoria y fallara la desasignación en el método de desasignación? ¿es posible usar más de 120 MB en la aplicación utilizando una asignación de estructura de datos bien definida?

Los bloques de las asignaciones de memoria separadas no se asignan contiguamente (llamadas separadas a alloc, malloc, new, etc.). De lo contrario, se asignan contiguamente (desde la misma llamada a malloc, por ejemplo, nuevo flotante [30]). De acuerdo con Apple, su aplicación corre el riesgo de ser desconectada para el uso de la memoria cuando usa más de 20 mb de ram. En la práctica, sin embargo, puede llegar a …

  • 260 MB de ram en el iPad 2 (gracias RobCroll)
  • 170-180 MB de dispositivos ram con 512 Mb de ram total (iPhone 4, iPod touch 4g)
  • 40-80 MB de memoria RAM en dispositivos que tienen 256 MB de ram (iPad, iPhone 3gs, iPod touch 3g)
  • 25 MB en el dispositivo con solo 128 MB de ram (iPhone 3g, iPhone 2g, iPod touch 1g-2g)

Si realmente “necesita” tanto RAM para una aplicación móvil, realmente debe guardar los datos en un archivo temporal y procesarlos en ese momento. Una manera fácil de hacerlo es mediante el uso de archivos mapeados en memoria.

Puede usar la memoria

(por ejemplo, estás usando 40 Mb de RAM, y luego asignando 80 Mb más para algunos cálculos cortos). En este caso, iOS mataría su aplicación de inmediato. 1

Lista de resultados encontrados por los usuarios que prueban con esta herramienta :

dispositivo: (cantidad de locking / cantidad total / porcentaje del total) 2

  • iPad1: 127 MB / 256 MB / 49%
  • iPad2: 275MB / 512MB / 53%
  • iPad3: 645MB / 1024MB / 62%
  • iPad4: 585MB / 1024MB / 57% (iOS 8.1)
  • iPad Mini 1ra generación: 297MB / 512MB / 58%
  • Retina iPad Mini: 696MB / 1024MB / 68% (iOS 7.1)
  • iPad Air: 697 MB / 1024 MB / 68%
  • iPad Air 2: 1195 MB / 2048 MB / 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ª generación: 130MB / 256MB / 51% (iOS 6.1.1)
  • iPod touch 5ta generación: 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% (teórico, no probado)
  • 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)

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

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

Más información se puede encontrar en esta pregunta .

Bajo el capó, iOS usa malloc y sus amigos para asignar memoria para cada objeto, así que sí, la memoria devuelta es realmente contigua. Si intenta asignar más memoria contigua disponible que la llamada malloc devolverá NULL (y probablemente algo más fallará cuando intente acceder a un puntero nulo si no se verifica correctamente)

Actualmente, la administración de memoria en iOS funciona sin límite de memoria claro para una aplicación. Pero puede manejar la situación cuando iOS le dice a su aplicación que libere memoria inmediatamente o se cerrará.

Respondiendo a las advertencias de memoria baja en iOS

128 MB es un bloque de memoria bastante grande para iOS. en caso de que intente asignar más límite de memoria, se cerrará una aplicación sin notificaciones.

No sé si el límite de uso de la memoria de la aplicación es de 128 MB o no. Pero si consume más memoria, su aplicación recibirá advertencias de memoria. Si los maneja y borra caché y otros objetos que puede crear en un momento posterior, su aplicación no se cerrará. Si los ignora, su aplicación se cerraría.