我有一套图像处理工具,最终可能会消耗大量内存,因为它用于处理大量图像(~50k x 50k x 1000 - > 2.5 terapixel)。虽然我尽可能地将内容保存在磁盘上并且尽可能地处理单个切片(因此低至2.5千兆像素),但有时它只是不起作用。
我希望能够做的是有一大块内存,我可以写入,如果有必要,将写入磁盘。这是交换空间背后的基本思想,但不需要root / admin访问权限和重新启动设置。此交换空间将特定于我的进程和我指定的内存。
执行此操作的一种方法是使用内存映射文件。然而,我相信这有一些缺点。内存映射文件可能会起作用,也许我只需要纠正这些误解。请告诉我内存映射实际上是如何工作的(最好是在Windows和Linux上)。
内存映射文件是否可以尝试同步到磁盘?我希望它们永远不会同步,除非有必要用于RAM目的(假设我从不调用msync / FlushViewOfFile)。
如果我首先只将页面大小的数据块写入内存映射区域,是否会读取基础文件?在Linux上:基础文件可以是使用ftruncate到所需大小创建的稀疏文件吗?
在Linux上:有没有办法获得私有的非写时复制内存映射?
更改内存保护(mprotect / VirtualProtect)会导致数据同步吗?