top命令输出的VIRT、RES、SHR有什么区别?VIRT表示进程虚拟空间的大小,也就是实际使用的内存,加上映射进程本身使用的内存(比如Xserver使用显卡内存),加上映射磁盘文件使用的内存(主要是加载共享库文件),加上与其他进程共享的内存。VIRT表示进程当前可以访问的内存量。RES表示常驻内存的大小,它是当前进程实际占用的物理内存的准确反映。(直接对应于%MEM列。)RES总是小于VIRT,因为大多数程序依赖于C库文件。SHR表示有多少VIRT实际上是共享部分(库文件使用的内存)。它与库文件有关,不会驻留整个库文件。例如,如果程序只使用了库文件中的几个函数,那么整个库文件将在VIRT和SHR中进行映射和计算,但实际上只有库文件中包含使用到的函数的部分会加载到内存中并计算到资源。顶部输出中VIRT、RES和SHR之间的差异VIRT代表进程的虚拟大小,这是它实际使用的内存的总和,它已映射到自身的内存(例如X服务器的视频卡RAM),磁盘上已映射到其中的文件(最显着的是共享库),以及与其他进程共享的内存。VIRT表示程序当前能够访问的内存量。RES代表驻留大小,它是一个进程消耗了多少实际物理内存的准确表示。(这也对应可怕的直接到%MEM列。)这实际上总是小于VIRT大小,因为大多数程序都依赖于C库。SHR表示VIRT大小中有多少是实际可共享的(内存或库)。就图书馆而言,这并不一定意味着整个图书馆都是常驻的。例如,如果一个程序只使用了一个库中的几个函数,那么整个库都会被映射并计入VIRT和SHR,但实际上只有库文件中包含正在使用的函数的部分才会被加载并计入根据RES。
