我运行一个程序,为IPC通信分配64MB作为共享内存。 pmap显示分配了64MB的块。但是,“top”显示proc的RES内存大约只有40MB!我得出结论,共享内存被标记为VIRT。但为什么? Linux仍然有超过1GB的RAM。
答案 0 :(得分:1)
你真的使用过64MB的任何一个吗? Linux推迟分配。
比照Does malloc lazily create the backing pages for an allocation on Linux (and other platforms)?
答案 1 :(得分:0)
Linux不会将进程“获取”所有内存加载到RAM中,它只是在您编程引用该内存块时将内存从虚拟位置加载到RAM。这里的“记忆”意味着私人记忆&共享内存。 我没有做过任何实验来验证上述观点,但我已经在很多地方看到过这样的事情,我确实相信它。仅供参考。
答案 2 :(得分:0)
共享内存就像大多数内存用户空间程序一样处理虚拟。只有活动页面需要映射到物理(即驻留内存)。采取不同的做法将浪费资源。
唯一的例外是当进程使用mlock
专门锁定RAM中的页面时。