Noté algo bastante extraño al tratar de asignar mucha memoria a mi iPhone 3G con iOS 4.2.1.Extraño comportamiento de asignación de memoria iOS
Cuando llamo malloc(512 * 1024)
en un bucle que devuelve un puntero válido durante alrededor de 1.500 veces después de lo cual me sale un NULL
y
app(2032,0x3e7518b8) malloc: *** mmap(size=524288) failed (error code=12)
*** error: can't allocate region
Me sorprendió, ya que creo que mi iPhone no 750 MB de RAM . Luego agregué un memset
después del malloc
y redujo el número de asignaciones a 120, lo que tiene mucho más sentido.
Aquí está el código súper simple que he utilizado:
for (int i = 1; ; ++i)
{
void *p = malloc(512 * 1024);
NSLog(@"%d %p", i, p);
memset(p, 0, 512 * 1024);
}
pensé iPhone no tenía ningún sistema de memoria virtual que podría explicar el comportamiento similar a este. ¿Cuál sería una explicación razonable para esto?