iOS núcleo asigna alrededor de 700 MB de memoria virtual por proceso. Entonces ese será tu límite.
El límite que tiene en la RAM diferirá a medida que el núcleo pagina los datos en la RAM desde la memoria virtual al tocar los datos asignados. Cuando la RAM en sí misma se llena, alrededor de 40 mb en el iPhone 4, dependiendo de la cantidad de RAM conectada por otras aplicaciones, y usted solicita más datos mapeados, el kernel necesitará sacar datos de la memoria RAM y reemplazarla con los datos solicitados por pagándolo en RAM.
Otra cosa para recordar es que si usa PROT_READ | PROT_WRITE
, entonces está permitiendo que los datos se escriban en el archivo asignado. Esto afectará los 700mb de espacio asignado si decide escribir datos en el archivo asignado.
Por lo tanto, el límite es de 700mb para la memoria virtual, ya sea que asigne un archivo de 500 mb y luego escriba otros 200 mb de datos en él, o si tiene, por ejemplo, 10 X 70mb archivos mapeados que acabas de leer.
Una última cosa es que puede liberar el archivo abierto que fue el origen de los datos asignados tan pronto como haya recibido un archivo correctamente mapeado usando mmap()
.
Espero que esto ayude.
Otros detalles:
En cuanto a la memoria virtual 700mb del iPhone y alrededor de 40mb de RAM, esto viene de hacer perfiles utilizando instrumentos.
En relación con el funcionamiento real de una gestión de memoria de sistemas. Lea en virtual memory Sobre cómo funciona esto en iOS. Lea la documentación de la manzana en la que se centra en virtual memory OS X, pero menciona diferencias en iOS
¿Ha intentado sólo la creación de ellos hasta que la aplicación se bloquea? El mensaje de error que recibas te dirá qué límite tocas primero. – Douglas