答案1
按顺序回答问题:
- 它返回一个指向位置的指针虚拟的内存,并且分配了虚拟内存地址空间,但文件不会以任何方式锁定,除非您显式锁定它(另请注意,锁定内存与锁定文件中的区域不同)。由于分页和虚拟内存的存在,mmap() 的有效实现实际上只能从实际角度来看(否则,需要将整个区域读入内存)前呼叫完成)。
- 不完全是,但这与下一个答案有关,所以我将在那里介绍它。
- 有点儿。在大多数情况下,实际发生的情况是 mmap() 提供对页面缓存中该文件数据的写时复制访问。因此,对数据生命周期的常见缓存限制适用:如果系统需要空间,则可以从缓存中删除页面(如果页面脏了,则将其刷新到磁盘),并且需要再次出现故障。
- 不,因为虚拟内存的工作原理。每个进程都有自己的虚拟地址空间和自己的虚拟映射。每个想要通信数据的程序都必须在同一文件(或共享内存段)上调用 mmap(),并且它们都必须使用该
MAP_SHARED
标志。
值得注意的是 mmap() 不仅仅适用于文件,您还可以用它做其他事情,例如: