Существует ли практическое ограничение на количество отображаемых в памяти файлов в iOS? - PullRequest
5 голосов
/ 08 февраля 2012

У меня есть приложение, в котором потенциально могут отображаться сотни областей памяти, т. Е. mmap(), файлы открываются в любой момент времени.

Мне нужна помощь в понимании того, какое практическое ограничение на количество открытых файлов с отображенной памятью.

Я создаю эти файлы mmap как:

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

1 Ответ

6 голосов
/ 04 апреля 2012

Ядро iOS выделяет около 700 МБ виртуальной памяти на процесс.Так что это будет вашим пределом.

Ограничение, которое у вас есть на ОЗУ, будет отличаться, так как данные ядра загружаются в ОЗУ из виртуальной памяти, когда вы касаетесь отображаемых данных.Когда сама память заполняется, около 40 Мб на iphone 4, в зависимости от того, сколько ОЗУ подключено другими приложениями, и вы запрашиваете больше сопоставленных данных, ядру потребуется вывести данные из ОЗУ и заменить их запрошенными данными с помощьюстраничка в оперативную память.

Еще одна вещь, которую следует помнить: если вы используете PROT_READ | PROT_WRITE, вы разрешаете записывать данные в сопоставленный файл.Это затем повлияет на 700 МБ выделенного пространства, если вы решите записать данные в сопоставленный файл.

Таким образом, ограничение составляет 700 МБ для виртуальной памяти, независимо от того, отображаете ли вы один файл размером 500 МБ, а затем записываете еще 200 МБ данных вэто, или если у вас есть, например, 10 X 70 МБ сопоставленных файлов, которые вы только что прочитали.

И последнее, что вы можете освободить открытый файл, который был источником отображенных данных, как только вы получили успешно сопоставленный файл, используя mmap().

Надеюсь, это поможет.

Дополнительная информация:

  • Что касается виртуальной памяти iphone 700 МБ и около 40 МБ ОЗУ, то это связано с выполнением профилирования с использованием инструментов.

  • Относительно фактической работы системы управления памятью.Читайте о виртуальной памяти Относительно того, как это работает на iOS.Прочитайте документы Apple по виртуальной памяти , которая ориентирована на OS X, но упоминает различия в iOS

...