mmap中MAP_ANONYMOUS | MAP_SHARED选项的作用是什么?我看到malloc使用MAP_ANONYMOUS | MAP_PRIVATE选项为更大的内存分配执行mmap。
我观察到使用MAP_ANONYMOUS | MAP_PRIVATE时,未映射的内存区域仍处于进程中(通过pmap观察),而使用MAP_ANONYMOUS | MAP_SHARED时,未映射的内存将立即释放。
答案 0 :(得分:2)
使用MAP_ANONYMOUS
时,MAP_PRIVATE
与MAP_SHARED
只会在过程分叉同时使用映射内存块的子项时产生影响。
如果您使用MAP_PRIVATE
,则映射的内存将标记为 copy-on-write ,因此其他进程将无法看到其中一个进程所做的更改。
如果您使用MAP_SHARED
,则两个进程都会共享映射内存,因此他们可以看到彼此的更改。
malloc()
使用MAP_PRIVATE
,以便父级和子级可以继续使用映射内存作为其堆,而无需同步更新。它的行为就像用于普通堆的数据段一样。