VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new 分配的堆空间和分配的栈空间等;
2、假如进程新申请10MB 的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB 使用量。
3、VIRT = SWAP + RES
向操作系统申请的内存,例如:char * p = new char [1024*1024*512];
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,包括使用中的malloc、new 分配的堆空间和分配的栈空间,但不包括swap out 量;
2、包含其他进程的共享;
3、如果申请10MB 的内存,实际使用1MB,它只增长1MB,与VIRT 相反;
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。
5、RES = CODE + DATA
RES 是真实使用的内存;例如:memset(p, 0, 1024 * 1024 * 10);
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out 后,它将会降下来
DATA
1、数据占用的内存。如果top 没有显示,按f 键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
注意:
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
如果程序占用实存比较多,说明程序申请内存多,实际使用的空间也多。
如果程序占用虚存比较多,说明程序申请来很多空间,但是没有使用。