malloc中的mmap选项

时间:2014-05-30 23:04:54

标签: linux malloc mmap

mmap中MAP_ANONYMOUS | MAP_SHARED选项的作用是什么?我看到malloc使用MAP_ANONYMOUS | MAP_PRIVATE选项为更大的内存分配执行mmap。

我观察到使用MAP_ANONYMOUS | MAP_PRIVATE时,未映射的内存区域仍处于进程中(通过pmap观察),而使用MAP_ANONYMOUS | MAP_SHARED时,未映射的内存将立即释放。

1 个答案:

答案 0 :(得分:2)

使用MAP_ANONYMOUS时,MAP_PRIVATEMAP_SHARED只会在过程分叉同时使用映射内存块的子项时产生影响。

如果您使用MAP_PRIVATE,则映射的内存将标记为 copy-on-write ,因此其他进程将无法看到其中一个进程所做的更改。

如果您使用MAP_SHARED,则两个进程都会共享映射内存,因此他们可以看到彼此的更改。

malloc()使用MAP_PRIVATE,以便父级和子级可以继续使用映射内存作为其堆,而无需同步更新。它的行为就像用于普通堆的数据段一样。