我有一个算法,如果我可以预留大约20块大小为4GB的内存地址,我的生活将大大简化。在实践中,我从不使用超过4GB,但我不知道哪个块会提前填满。
如果我mmap
20块4GB的东西似乎一切正常 - 直到我写入内存操作系统似乎没有实际分配任何东西。
有什么理由我不应该使用mmap
分配80GB内存,然后只使用少量内存?我假设设置这些缓冲区需要一些成本。我能测量一下吗?
答案 0 :(得分:2)
同时mmap-80GB的唯一缺点是必须为完整的80GB创建page table。因此,如果页面为4kB,则此表可能会占用大量内存(除非使用huge pages)。
对于这样的大小,最好使用一个或多个滑动 mmap-ed视图(即在需要时创建和删除它们)。
在Windows上,可以使用RamMap检查mmap / page表的内存使用情况,但不确定Mac。