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

时间:2012-02-07 22:12:00

标签: ios mmap

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

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

我创建了这些mmap文件,如:

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

1 个答案:

答案 0 :(得分:6)

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

当您触摸映射数据时,内核将数据从虚拟内存中分配到RAM中,因此RAM上的限制将有所不同。当RAM本身填满时,iphone 4上大约40mb,取决于其他应用程序连接多少RAM,并且您请求更多映射数据,内核将需要从RAM中分页数据并将其替换为所请求的数据将其分配到RAM中。

另一件需要记住的事情是,如果使用PROT_READ | PROT_WRITE,则允许将数据写入映射文件。如果您决定将数据写入映射文件,则会影响700mb的已分配空间。

因此虚拟内存的限制为700mb,无论您是映射一个500mb的文件,然后再向其写入200mb的数据,或者如果您有您刚刚阅读的10 X 70mb映射文件。

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

希望这有帮助。

其他信息:

  • 关于iphone的700mb虚拟内存和大约40mb RAM,这来自使用乐器进行分析。

  • 关于系统内存管理的实际工作方式。阅读virtual memory 关于它如何在iOS上运行。阅读专注于OS X的virtual memory上的苹果文档,但提到iOS上的差异