Les iO utilisent-ils une allocation non contiguë ou contiguë dans la gestion de la mémoire? supposons que si l'utilisateur alloue plus de 128 Mo, l'application sera-t-elle fermée? ou La mémoire sera gérée par iOS comme si l'utilisateur allouait de la mémoire et manquait de désallouer dans la méthode de désallocation est-il possible d'utiliser plus de 120 Mo dans une application utilisant une allocation de structure de données bien définie?
Les blocs provenant d'allocations de mémoire séparées ne sont pas alloués de manière contiguë (appels séparés à alloc, alloc, malloc, new, etc.) Sinon, ils sont affectés de manière contiguë (à partir du même appel à malloc, par exemple new float [30]). Selon Apple, votre application risque d'être arrêtée pour utiliser de la mémoire si vous utilisez plus de 20 Mo de RAM. En pratique cependant, vous pouvez vous rendre à peu près ...
Si vous avez vraiment "besoin" de beaucoup de RAM pour une application mobile, vous devez vraiment enregistrer les données dans un fichier temporaire et effectuer le traitement correspondant. Un moyen simple de le faire consiste à utiliser des fichiers mappés en mémoire.
Vous pouvez utiliser la mémoire <capacité de votre appareil
(Par exemple, vous utilisez 40 Mo de RAM, puis allouez 80 Mo de plus pour des calculs courts). Dans ce cas, iOS tuerait votre application immédiatement.1
Liste des résultats trouvés par les utilisateurs testant avec cet outil :
appareil: (montant du crash/montant total/pourcentage du total)2
- iPad1: 127 Mo/256 Mo/49%
- iPad2: 275 Mo/512 Mo/53%
- iPad3: 645 Mo/1024 Mo/62%
- iPad4: 585 Mo/1024 Mo/57% (iOS 8.1)
- iPad Mini 1ère génération: 297 Mo/512 Mo/58%
- iPad Mini rétine: 696 Mo/1024 Mo/68% (iOS 7.1)
- iPad Air: 697 Mo/1024 Mo/68%
- iPad Air 2: 1195 Mo/2048 Mo/58% (iOS 8.x)
- iPad Pro 12.9: 3064 Mo/3981 Mo/77% (iOS 9.3.2)
- iPad Pro 9.7 ": 1395 Mo/1971 Mo/71% (iOS 10.0.2 (14A456))
- iPod touch 4e génération: 130 Mo/256 Mo/51% (iOS 6.1.1)
- iPod touch 5e génération: 286 Mo/512 Mo/56% (iOS 7.0)
- iPhone4: 325 Mo/512 Mo/63%
- iPhone4S: 286 Mo/512 Mo/56%
- iPhone5: 645 Mo/1024 Mo/62%
- iPhone5S: 646 Mo/1024 Mo/63%
- iPhone6: 645 Mo/1024 Mo/62% (iOS 8.x)
- iPhone6 +: 645 Mo/1024 Mo/62% (iOS 8.x)
- iPhone6s: 1396 Mo/2048 Mo/68% (iOS 9.2)
- iPhone6s +: 1195 Mo/2048 Mo/58% (théorique, non testé)
- iPhoneSE: 1395 Mo/2048 Mo/69% (iOS 9.3)
- iPhone 6s +: 1392 Mo/2048 Mo/68% (iOS 10.2.1)
- iPhone 7+: 2040 Mo/3072 Mo/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
Plus d'informations peuvent être trouvées sur cette question .
Actuellement, la gestion de la mémoire dans iOS fonctionne sans limite de mémoire claire pour une application . Mais vous pouvez gérer la situation dans laquelle iOS demande à votre application de libérer de la mémoire immédiatement ou elle sera fermée.
Réponse aux avertissements de mémoire insuffisante sous iOS
128 Mo est un assez gros bloc de mémoire pour iOS. si vous essayez d’allouer plus de mémoire, une application sera fermée sans notification.
Sous le capot, iOS utilise malloc et ses amis pour allouer de la mémoire à chaque objet. La mémoire restituée est donc contiguë. Si vous essayez d'allouer plus que la mémoire contiguë disponible, l'appel malloc renverra la valeur NULL (et une autre erreur échouera si vous tentez d'accéder à un pointeur NULL s'il n'est pas coché correctement).
Je ne sais pas si la limite d'utilisation de la mémoire de l'application est de 128 Mo ou non. Mais si vous utilisez plus de mémoire, votre application recevra des avertissements de mémoire. Si vous les gérez et effacez le cache et d'autres objets que vous pouvez créer ultérieurement, votre application ne se fermera pas. Si vous les ignorez, votre application s’arrêtera.