![什么是内存映射文件?请用一个简单的例子描述一下?](https://linux22.com/image/1518280/%E4%BB%80%E4%B9%88%E6%98%AF%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84%E6%96%87%E4%BB%B6%EF%BC%9F%E8%AF%B7%E7%94%A8%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90%E6%8F%8F%E8%BF%B0%E4%B8%80%E4%B8%8B%EF%BC%9F.png)
我实际上并不明白内存映射文件是什么以及为什么我们使用它们以及它们适合操作系统的哪个部分。请用一个简单的例子解释一下。
谢谢
答案1
“内存映射”不是一种文件类型,而是一种访问方式。同一类型的文件可以由程序 A 正常读取,但可以由程序 B 进行内存映射。
通常(在大多数编程语言中),每个文件访问都需要单独的调用:
- 你首先
open
获取文件(获取“文件描述符”), seek
到所需位置(如有必要),read
一定数量的字节(将其从文件复制到 RAM 中),- …
seek
,read
,read
,seek
,write
,read
, 等等。
因此,如果您使用数据库文件等,则涉及大量系统调用,更不用说复制进和复制出的所有数据。(通常有方便的 seek+read 和 seek+write 调用,例如pread
在pwrite
Linux 上,但它们没有多大帮助。)
同时,内存映射允许程序访问文件就像 RAM 一样在open
读取文件之后,程序只需要一次mmap
调用来设置一个内存区域,之后就可以立即通过该“窗口”访问文件的内容——使用变量从文件读取,使用变量将内容写入文件。
这可以大大简化代码,并加快文件的加载和保存速度,因为程序知道数据将要存在,但操作系统实际上直到真正需要时才加载它。