标记为虚拟内存的共享内存



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

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

cf。malloc是否为Linux(和其他平台)上的分配惰性地创建备份页?

Linux并没有将进程"获得"的所有内存加载到RAM,它只是在程序引用内存块时将内存从虚拟位置加载到RAM。这里"内存"是指私有内存&共享mem两者。我还没有做任何实验来验证上述观点,但我在很多地方都看到了这一点,我确实相信。仅供参考。

共享内存就像userland程序处理的大多数(如果不是全部的话)内存一样,是虚拟的。只有活动页面需要映射到物理(即驻留内存)。采取不同的做法会浪费资源。

唯一的例外是进程使用mlock专门锁定RAM中的页面。

最新更新