Я заметил довольно странную вещь, пытаясь выделить много памяти на моем iPhone 3G под управлением iOS 4.2.1.Странное поведение распределения памяти iOS
Когда я звоню malloc(512 * 1024)
в цикле он возвращает действительный указатель на около 1500 раз, после чего я получаю NULL
и
app(2032,0x3e7518b8) malloc: *** mmap(size=524288) failed (error code=12)
*** error: can't allocate region
Это удивило меня, так как я думаю, что мой iPhone не 750 МБ оперативной памяти , Затем я добавил memset
после malloc
, и это принесло количество распределений до 120, что имеет гораздо больший смысл.
Вот супер-простой код, который я использовал:
for (int i = 1; ; ++i)
{
void *p = malloc(512 * 1024);
NSLog(@"%d %p", i, p);
memset(p, 0, 512 * 1024);
}
я, хотя iPhone не имеет какой-либо виртуальной памяти системы, которые могли бы объяснить поведение, похожее на это. Что было бы разумным объяснением этого?