是否有 msync 的反函数?
Is there an inverse of msync?
如果你映射一个文件,它会创建一个内存范围的虚拟映射。然后,当您尝试访问该虚拟地址范围时,它会从您要映射到的区域复制数据,以便您拥有数据。
Msync 应该同步您对虚拟范围所做的任何更改,并将这些更改复制回您映射到的内存。
有没有办法做相反的事情?也就是说,将虚拟 space 重新映射到相同的内存范围,以便自您第一次使用 mmap 以来对物理内存所做的任何更改都反映在您的虚拟映射中?
执行此操作的直接方法是取消映射并再次执行 mmap,但我想知道是否有更有效的方法来执行此操作。
这是假设我只是使用 mmap 从物理内存中读取,而不对其进行任何更改。
没有反向操作,因为对基础文件的所有更改都立即在映射内存中可用 - 它们共享相同的内存。同一文件的其他映射也是如此 - 它们引用相同的物理内存,因此对于同一区域的所有映射,所有其他进程中的任何更改都会立即可用。
请注意,文件是指任何类型的文件,包括物理设备、常规文件等。
如果你映射一个文件,它会创建一个内存范围的虚拟映射。然后,当您尝试访问该虚拟地址范围时,它会从您要映射到的区域复制数据,以便您拥有数据。
Msync 应该同步您对虚拟范围所做的任何更改,并将这些更改复制回您映射到的内存。
有没有办法做相反的事情?也就是说,将虚拟 space 重新映射到相同的内存范围,以便自您第一次使用 mmap 以来对物理内存所做的任何更改都反映在您的虚拟映射中?
执行此操作的直接方法是取消映射并再次执行 mmap,但我想知道是否有更有效的方法来执行此操作。
这是假设我只是使用 mmap 从物理内存中读取,而不对其进行任何更改。
没有反向操作,因为对基础文件的所有更改都立即在映射内存中可用 - 它们共享相同的内存。同一文件的其他映射也是如此 - 它们引用相同的物理内存,因此对于同一区域的所有映射,所有其他进程中的任何更改都会立即可用。
请注意,文件是指任何类型的文件,包括物理设备、常规文件等。