Mmap在malloc中的选项



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

我观察到,对于MAP_ANONYMOUS|MAP_PRIVATE,未映射的内存区域仍然与进程在一起(通过pmap观察),而对于MAP_ANONYMOUS|MAP_SHARED,未映射的内存区域立即被释放回来。

当使用MAP_ANONYMOUS时,MAP_PRIVATEMAP_SHARED只有在进程派生一个也使用映射内存块的子进程时才有区别。

如果使用MAP_PRIVATE,则映射的内存标记为写时复制,因此其中一个进程所做的更改将不会被其他进程看到。

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

malloc()使用MAP_PRIVATE,这样父节点和子节点可以继续使用映射的内存,而不需要同步更新。它的行为就像用于普通堆的数据段。

相关内容

  • 没有找到相关文章

最新更新