Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 标记为虚拟内存的共享内存?_Linux_Unix_Operating System_Ipc - Fatal编程技术网

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

Linux 标记为虚拟内存的共享内存?,linux,unix,operating-system,ipc,Linux,Unix,Operating System,Ipc,我运行一个程序,分配64MB作为IPC通信的共享内存。pmap显示分配了64MB的块。然而,“top”显示进程的RES内存只有40MB左右!我得出结论,共享内存被标记为VIRT。但是为什么呢?Linux仍然有超过1GB的可用内存。您实际使用过64MB的内存吗?Linux推迟了分配 cf.您实际使用了64MB中的任何一个吗?Linux推迟了分配 参见。Linux不会将进程“获取”的所有内存加载到RAM中,它只是在程序引用该内存块时将内存从虚拟位置加载到RAM中。这里“内存”是指私有内存& 两者共享

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

您实际使用过64MB的内存吗?Linux推迟了分配


cf.

您实际使用了64MB中的任何一个吗?Linux推迟了分配


参见。

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

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

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


唯一的例外是,当进程使用
mlock

共享内存专门锁定RAM中的页面时,就像大多数(如果不是所有)内存用户程序所处理的一样,是虚拟的。只有活动页需要映射到物理(即驻留内存)。采取不同的做法会浪费资源


唯一的例外是,当进程使用
mlock

专门锁定RAM中的页面时,它会立即使用所有64MB吗?在linux中,除非您是内核,或者您正在处理类似硬件映射帧缓冲区之类的事情,否则几乎所有内存都是虚拟的。它会立即使用所有64MB吗?在linux中,除非你是内核,或者你正在处理像硬件映射帧缓冲区之类的东西,否则几乎所有的内存都是虚拟的。你的理论看起来是正确的!我刚刚运行了一个测试,让这个应用程序使用共享内存块接收消息,并观察到RES大幅增加,而VIRT几乎保持不变。当应用程序预先分配大量内存时,它实际上是一个非常有用的功能,而实际上它们永远不会分配。操作系统是否使用延迟分配与OP在这里观察到的情况无关。这与操作系统没有像Solaris那样进行惰性分配是完全一样的。你的理论看起来是正确的!我刚刚运行了一个测试,让这个应用程序使用共享内存块接收消息,并观察到RES大幅增加,而VIRT几乎保持不变。当应用程序预先分配大量内存时,它实际上是一个非常有用的功能,而实际上它们永远不会分配。操作系统是否使用延迟分配与OP在这里观察到的情况无关。这与操作系统没有像Solaris那样进行惰性分配是完全相同的。