c++ - boost managed_mapped_file 使用我的物理内存吗?

标签 c++ linux memory boost mmap

<分区>

我想将一个文件(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/

相关文章:

php - 如何在我自己的本地 PHP 服务器上造成拒绝服务?

C 结构中的内存错误

c++ - Qt 5.1 - 带 LAMPP 的 MySQL 驱动程序

linux - 如何从 list1 中查找模式,然后替换 list2 中的上一行

c++ - 无法使 opengl 纹理正常工作

linux - 如何将网页写入txt文件并使用第一行作为变量

C++ 内存垃圾处理

flash - 如何减少我的flash 游戏的后台引擎600MB 内存使用高峰?

c++ - 如何在 Linux 上强制执行 vector 下标超出范围调试断言

c++ - 将文件名转换为 C 字符串