【发布时间】:2014-12-04 15:51:41
【问题描述】:
我想将一个文件(512M)映射到共享内存,以便每个进程都可以访问它。我选择 boost::interprocess::managed_mapped_file。
我认为共享内存不应该占用real 内存,因为它是由多个进程共享的。但是当我运行我的程序时,似乎每个进程都使用了 512M 的内存。而且内存不够20个进程。
那么为什么 boost::interprocess::managed_mapped_file 占用的是实内存而不是虚拟内存呢?
【问题讨论】:
-
试试吧。我认为您将 virt 集误认为是 reserved/committed 集。
-
是的,它正在使用您的物理内存,但仅限于可用内存。否则,未锁定的页面(可能是所有页面)将被换出物理内存。当然,这些页面仍将映射到您的虚拟地址空间,直到您取消映射。换出脏页需要写入,换回页需要读取,因此可用于“备份”虚拟文件映射的物理页太少可能会导致性能非常差。
标签: c++ linux memory boost mmap