OSX,Windows和Linux之间可能有不同的答案。
如果进程崩溃,那么来自mmap的脏页将被操作系统丢弃或写出,假设它没有崩溃?
很明显,如果另一个进程已映射它们,它们会持续存在,但如果崩溃的进程是唯一的进程怎么办?我对文档中技术上承诺的内容以及实现实际执行的内容感兴趣。如果您只知道一个操作系统,请回复该操作系统。
答案 0 :(得分:1)
对于Windows,我认为毫无疑问脏页最终写入磁盘。有明确记载,取消映射文件视图不会刷新数据,但数据将像任何缓存一样懒惰地写入磁盘。 FlushViewOfFile强制立即写入,但调用它是可选的。
有些例外可能或许多不相关。即使一个程序异常终止,也保证文件的两个映射视图保持一致,但这种一致性不会扩展到远程文件或使用ReadFile / WriteFile并发访问的文件。
文档没有提供明确的答案,但也没有给出任何相反可能属实的提示。我会依赖于测试。
正如链接中所指出的,如果存在机器故障的风险,确保页面在写入时会被刷新是个好主意。刷新缓存的内核可能会延迟很长一段时间。