是使用我的物理内存提升managed_mapped_file吗?

时间:2014-12-04 15:51:42

标签: c++ linux memory boost mmap

我想将文件(512M)映射到共享内存,以便每个进程都可以访问它。我选择boost :: interprocess :: managed_mapped_file。

我认为共享内存不应该占用real内存,因为它由多个进程共享。但是当我运行我的程序时,似乎每个进程都使用了512M的内存。并且没有足够的内存用于20个进程。

那么为什么boost :: interprocess :: managed_mapped_file占用实内存但不占用虚拟内存?

1 个答案:

答案 0 :(得分:1)

  

我认为共享内存不应该占用实际内存

不,你需要高达512M的真实"内存(虽然这可能是按需分页进出物理内存)。每个进程都将使用该内存。

  

似乎每个进程都使用了512M的内存

每个将有512M的共享内存映射到其虚拟地址空间;大概就是你所看到的。它将是每个映射背后相同的512M物理内存。

  

并且没有足够的内存用于20个进程。

你是说你实际耗尽了物理内存,好像每个进程分配了512M的吗?如果每个进程都为自己获取物理内存,而不是共享它,则在创建和共享虚拟内存时会出现问题。我们需要了解您是如何做到这一点来猜测可能出现的问题。