这在 OSX、Windows 和 Linux 之间可能有不同的答案。
如果进程崩溃,假设它没有崩溃,mmap 中的脏页最终是否会被操作系统丢弃或写出?
很明显,如果另一个进程映射了它们,它们仍然存在,但是如果崩溃的进程是唯一的呢?我对文档中的技术 promise 和实现的实际作用都感兴趣。如果您只知道一种操作系统,请仅针对该操作系统进行回复。
最佳答案
对于 Windows,我认为脏页最终会写入磁盘是毫无疑问的。明确记录了取消映射文件 View 不会刷新数据,但数据将像任何缓存一样延迟写入磁盘。 FlushViewOfFile 强制立即写入,但调用它是可选的。
有一些可能或许多不相关的异常(exception)情况。即使一个程序异常终止,文件的两个映射 View 也能保证保持一致,但这种一致性不会扩展到远程文件或使用 ReadFile/WriteFile 同时访问的文件。
文档没有提供明确的答案,但也没有暗示相反的情况可能是正确的。我会依赖,但需要经过测试。
正如链接中所指出的,如果存在机器故障的风险,最好确保页面在写入时被刷新。刷新缓存的内核可能会延迟一段时间。
关于c++ - 如果进程崩溃,映射文件会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172393/