我希望mmap
文件的某个区域,进行更改,然后msync(MS_INVALIDATE)
,以便我的内存更改丢失,或者,如果我喜欢这些更改,{{ 1}}将它们写回底层存储。
msync
manpage在msync(MS_SYNC)
上说明了以下内容:
当指定MS_INVALIDATE时,msync()将使与永久存储位置不一致的映射数据的所有缓存副本无效,以便后续引用在调用msync()之间的某个时间内获取与永久存储位置一致的数据以及对数据的第一个后续内存引用。
这给人的印象是MS_INVALIDATE
应该重置将内存恢复到存储状态。但是,当我进行MS_INVALIDATE
调用时,这些更改似乎已经进入设备。
备注
答案 0 :(得分:0)
如果这只是为了访问大文件并进行一些本地修改,只需执行MAP_PRIVATE
并在您决定再次使用原始版本时丢弃映射。
在现代系统上,性能开销应该可以忽略不计: