MAP_ANONYMOUS|MAP_SHARED选项在mmap中的作用是什么?我看到malloc使用MAP_ANONYMOUS|MAP_PRIVATE选项来为更大的内存分配执行mmap。
我观察到,对于MAP_ANONYMOUS|MAP_PRIVATE,未映射的内存区域仍然与进程在一起(通过pmap观察),而对于MAP_ANONYMOUS|MAP_SHARED,未映射的内存区域立即被释放回来。
当使用MAP_ANONYMOUS
时,MAP_PRIVATE
和MAP_SHARED
只有在进程派生一个也使用映射内存块的子进程时才有区别。
如果使用MAP_PRIVATE
,则映射的内存标记为写时复制,因此其中一个进程所做的更改将不会被其他进程看到。
如果您使用MAP_SHARED
,则映射的内存由两个进程共享,因此它们可以看到彼此的更改。
malloc()
使用MAP_PRIVATE
,这样父节点和子节点可以继续使用映射的内存,而不需要同步更新。它的行为就像用于普通堆的数据段。