如果你mmap一个文件,它会创建一些内存范围的虚拟映射。然后,当您尝试访问该范围的虚拟地址时,它会复制您要映射到的区域中的数据,以便获得数据。
Msync应该同步您对虚拟范围所做的任何更改,并将这些更改复制回您映射到的内存。
有没有办法扭转这种局面?也就是说,要将虚拟空间重新映射到相同的内存范围,以便自第一次使用mmap以来对物理内存所做的任何更改都会反映在虚拟映射中?
执行此操作的直接方法是取消映射并再次执行mmap,但我想知道是否有更有效的方法来执行此操作。
这假设我只是使用mmap从物理内存中读取,而不是对其进行任何更改。
答案 0 :(得分:0)
没有反向操作,因为所有对底层文件的更改都可以立即在映射内存中使用 - 它们共享相同的内存。对于同一文件的其他映射也是如此 - 它们引用相同的物理内存,因此对于同一区域的所有映射,所有其他进程中的任何更改都立即可用。
请注意,按文件我的意思是任何类型的文件,包括物理设备,常规文件等。