如果进程崩溃,映射文件会发生什么
What happens to mmaped file if process crashes?
这个问题在OSX, Windows和Linux之间可能有不同的答案。
如果进程崩溃,假设它没有崩溃,那么mmap中的脏页是否会被丢弃或最终由操作系统写出来?
很明显,如果另一个进程映射了它们,那么它们会持续存在,但是如果崩溃的进程是唯一一个进程呢?我对文档中的技术承诺和实际实现都很感兴趣。
对于Windows,我认为毫无疑问脏页最终会被写入磁盘。有明确的文档说明,取消映射文件视图不会刷新数据,但数据将像任何缓存一样惰性地写入磁盘。FlushViewOfFile强制立即写入,但调用它是可选的。
有一些例外可能是相关的,也可能是不相关的。即使一个程序异常终止,文件的两个映射视图也保证保持一致性,但这种一致性不会扩展到远程文件或使用ReadFile/WriteFile并发访问的文件。
文档没有提供明确的答案,但也没有给出任何暗示,说明相反的情况可能是正确的。
正如链接中指出的那样,如果存在机器故障的风险,那么确保页面在写入时被刷新可能是一个好主意。内核刷新缓存可能会延迟一段时间
相关文章:
- c++库的公共头文件中应该包含什么
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 文件系统:复制功能的速度秘诀是什么
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 在C++中包含原型文件的正确方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 什么文件可以修改 atom 的C++语法?
- 引用文件的适当方法是什么?
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 生成文件"relink"意味着什么?
- 将位字符串转储到二进制文件的最佳方法是什么
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 通过boost asio iostream下载大文件的最快方法是什么?
- C++我应该用什么来保存格式化为字符串变量(如sprintf())的文件
- 如何确定g++编译器错误中缺少什么文件
- 在其他计算机 MVCP100d 中打开 EXE 需要什么文件
- 如何确定什么文件称为c++程序
- wxWidgets 2.9.1 什么文件取代了 wxmswd.lib