我运行一个程序,它分配 64MB 作为 IPC 通信的共享内存。pmap 显示分配了 64MB 的块。然而,"top" 显示 proc 的 RES 内存只有 40MB 左右!我得出结论,共享内存被标记为 VIRT。但为什么?Linux 仍然有超过 1GB 的可用 RAM。
问问题
326 次
3 回答
1
你真的用过那64MB吗?Linux 延迟分配。
于 2013-02-08T21:47:09.783 回答
0
Linux 不会将进程“获得”的所有内存加载到 RAM 中,它只会在您编程引用该内存块时将内存从虚拟位置加载到 RAM。这里的“内存”是指私有内存和共享内存。我还没有做任何实验来验证上述观点,但我在很多地方都看到过,比如 SO,我确实相信。仅供参考。
于 2014-03-02T15:36:12.373 回答
0
就像用户态程序处理的大多数(如果不是全部)内存一样,共享内存是虚拟的。只有活动页面需要映射到物理(即常驻内存)。采取不同的做法会浪费资源。
唯一的例外是当进程专门用mlock
.
于 2014-03-02T20:41:28.900 回答