1

我运行一个程序,它分配 64MB 作为 IPC 通信的共享内存。pmap 显示分配了 64MB 的块。然而,"top" 显示 proc 的 RES 内存只有 40MB 左右!我得出结论,共享内存被标记为 VIRT。但为什么?Linux 仍然有超过 1GB 的可用 RAM。

4

3 回答 3

1

你真的用过那64MB吗?Linux 延迟分配。

参看。malloc 是否会为 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 回答