gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 04:36:31 26 4
gpt4 key购买 nike

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

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

我像这样创建这些 mmap 文件:

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

最佳答案

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 上的工作原理。在 virtual memory 上阅读苹果文档着重于 OS X,但提到了 iOS 上的差异

关于ios - iOS 中内存映射文件的数量是否有实际限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9184773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com