有没有一种方法可以通过MAP_PRIVATE创建一个写时复制映射,写入一些数据(即脏页),然后丢弃我的更改,而不使用munmap和重新映射?目标是保持给定映射的相同虚拟地址(如果我取消映射并再次映射相同的文件,则无法保证发生这种情况),但一次性丢弃所有的COW更改。
据我所知,尝试通过暗示地址并使用MAP_FIXED标志重新映射空间可能会产生这种效果;但我不确定我的MAP_FIXED文档解释是否正确,或者是否保证了这种行为。
引用来自mmap(2)文档:
据我所知,尝试通过暗示地址并使用MAP_FIXED标志重新映射空间可能会产生这种效果;但我不确定我的MAP_FIXED文档解释是否正确,或者是否保证了这种行为。
引用来自mmap(2)文档:
If the memory region specified by addr and len overlaps pages of any existing
mapping(s), then the overlapped part of the existing mapping(s) will be
discarded.
在这种情况下,“被丢弃”是否意味着任何COW页面都将被丢弃,而从相应页面读取的新内容将会失败并反映磁盘上的更改?
lseek
到这些位置并进行read
操作,您将看到相同的数据。 - Kaz