2012-02-07 8 views
5

Tengo una aplicación que puede tener asignados cientos de memoria, es decir, mmap(), archivos abiertos en cualquier momento.¿Existe un límite práctico en la cantidad de archivos mapeados en memoria en iOS?

Estoy buscando algo de ayuda para entender qué es, si existe, el límite práctico de la cantidad de archivos mapeados en la memoria abierta.

I crear estos archivos mmap como:

void* map = mmap(0, *capacity, PROT_READ | PROT_WRITE, MAP_SHARED, file, 0); 
+0

¿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

Respuesta

5

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

+0

¡Gracias por la respuesta! ¿Esta información se define en algún lugar del sitio de Apple para que pueda leer sobre ella con mayor detalle? –

+0

@TReddy - Actualicé mi respuesta. Si está interesado en cómo el núcleo realmente maneja la memoria en un nivel inferior, agregue un comentario y pueda agregar más fuentes. : D – jarryd

+0

Gracias por los enlaces ... muy informativo ... –

Cuestiones relacionadas