<分区>
我想将一个文件(512M)映射到共享内存,以便每个进程都可以访问它。我选择 boost::interprocess::managed_mapped_file。
我认为共享内存不应该占用真正的
内存,因为它是由多个进程共享的。但是当我运行我的程序时,似乎每个进程都使用了 512M 的内存。并且没有足够的内存来容纳 20 个进程。
那么为什么 boost::interprocess::managed_mapped_file 占用真实内存而不占用虚拟内存?
<分区>
我想将一个文件(512M)映射到共享内存,以便每个进程都可以访问它。我选择 boost::interprocess::managed_mapped_file。
我认为共享内存不应该占用真正的
内存,因为它是由多个进程共享的。但是当我运行我的程序时,似乎每个进程都使用了 512M 的内存。并且没有足够的内存来容纳 20 个进程。
那么为什么 boost::interprocess::managed_mapped_file 占用真实内存而不占用虚拟内存?
最佳答案
I think shared memory should not take real memory
不,您最多需要 512M 的“实际”内存(尽管这可能会根据需要调入和调出物理内存)。每个进程都将使用该内存。
it seems that every process has used 512M of memory
每个都会有512M的共享内存映射到它的虚拟地址空间;大概这就是你所看到的。每次映射后都会有相同的512M物理内存。
And there is not enough memory for 20 processes.
你是说你实际上用完了物理内存,好像每个进程都分配了512M吗?如果每个进程都为自己占用物理内存,而不是共享它,那么当您创建和共享虚拟内存时就会出现问题。我们需要看看您是如何做的,以猜测可能出了什么问题。
关于c++ - boost managed_mapped_file 使用我的物理内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27298253/