我有一个可能有数百个内存映射的应用程序,即mmap()在任何时间点打开的文件.
我正在寻找一些帮助,了解实际限制是什么,如果有的话,打开的内存映射文件的数量是.
我创建这些mmap文件,如:
void* map = mmap(0, *capacity, PROT_READ | PROT_WRITE, MAP_SHARED, file, 0);
Run Code Online (Sandbox Code Playgroud)
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,这来自使用仪器进行分析.
关于系统内存管理的实际工作方式.阅读虚拟内存 关于它在iOS上的工作原理.阅读专注于OS X的虚拟内存上的apple docs ,但提到iOS上的差异
| 归档时间: |
|
| 查看次数: |
1991 次 |
| 最近记录: |