Ядро 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