所以我有一个我用mmap()分配的内存区域,类似于下面的代码:
void * ptr = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
Run Code Online (Sandbox Code Playgroud)
这里的关键是我正在使用MAP_SHARED标志.与此相关的问题不同,只需再次调用mmap()以获取MAP_PRIVATE和Copy-on-Write语义就足够了,我不能让内核为我分配不同范围的虚拟地址.另外,在我再次调用mmap()之前,我不想调用munmap()并冒险让内核将部分/全部地址范围提供给进程中的其他内容.
是否存在将mmap内存区域从MAP_SHARED切换到MAP_PRIVATE以获取写时复制语义而不取消映射块的现有机制?