iOS中的内存映射文件的数量是否有实际的限制?

我有一个应用程序,可能有数百内存映射,即mmap() ,在任何时间点打开的文件。

我正在寻找一些帮助,理解什么,如果有的话,实际限制是在打开的内存映射文件的数量是。

我创build这些mmap文件,如:

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

iOS内核每个进程分配大约700MB的虚拟内存。 所以这将是你的极限。

RAM上的限制会随着内核从虚拟内存中将数据分页到RAM中而不同。 当RAM本身填满时,iphone 4上大约有40MB,取决于其他应用程序连接了多lessRAM,并且您请求更多的映射数据,内核将需要从RAM中分页数据,并用请求的数据replace分页到RAM。

另外要记住的是,如果你使用PROT_READ | PROT_WRITE PROT_READ | PROT_WRITE然后你允许数据被写入映射的文件。 如果您决定将数据写入映射文件,这将影响700MB的分配空间。

所以虚拟内存的限制是700MB,无论是映射一个500MB的文件,然后再写入200MB的数据,或者如果您有例如10 X 70mb的刚刚读取的映射文件。

最后一件事是,只要您使用mmap()接收到成功映射的文件,就可以释放已经映射的数据源的打开文件。

希望这可以帮助。

附加信息:

  • 关于iPhone的700MB的虚拟内存和约40MB的RAM,这来自使用仪器进行分析。

  • 关于系统内存pipe理的实际工作。 阅读虚拟内存关于这是如何工作在iOS上。 阅读专注于OS X的虚拟内存上的苹果文档,但在iOS上提到了差异