我运行以下简单程序
#include <stdio.h>
#include <stdlib.h>
int
main() {
malloc(1024*1024*32);
getchar();
return 0;
}
htop
给出了这个
VIRT RES SHR
36684 312 240
pmap -x
给出了这个
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 0 4 0 r-x-- a.out
0000000000600000 0 4 4 r---- a.out
0000000000601000 0 4 4 rw--- a.out
00007f063d3b7000 0 4 4 rw--- [ anon ]
00007f063f3b8000 0 228 0 r-x-- libc-2.12.1.so
00007f063f532000 0 0 0 ----- libc-2.12.1.so
00007f063f731000 0 16 16 r---- libc-2.12.1.so
00007f063f735000 0 4 4 rw--- libc-2.12.1.so
00007f063f736000 0 12 12 rw--- [ anon ]
00007f063f73b000 0 108 0 r-x-- ld-2.12.1.so
00007f063f93d000 0 12 12 rw--- [ anon ]
00007f063f958000 0 8 8 rw--- [ anon ]
00007f063f95b000 0 4 4 r---- ld-2.12.1.so
00007f063f95c000 0 4 4 rw--- ld-2.12.1.so
00007f063f95d000 0 4 4 rw--- [ anon ]
00007fff4b298000 0 12 12 rw--- [ stack ]
00007fff4b2d7000 0 4 0 r-x-- [ anon ]
ffffffffff600000 0 0 0 r-x-- [ anon ]
---------------- ------ ------ ------
total kB 36684 432 88
htop
和pmap
显示相同的虚拟大小(36684),但它们显示物理内存的不同内容(htop
的{{1}} = 321和{{1 }} RES
= 432)。
也许我会混淆某些内容,但pmap
的{{1}}和RSS
htop
之间是否存在差异?
答案 0 :(得分:1)
因此,从顶部的手册页中我们可以看到:
q:RES-居民大小(kb)
任务已使用的未交换物理内存。
对于pmap:
RSS:居民集大小(以千字节为单位)
因此,它们似乎是同一回事。但是实际上,如果您还检查了ps,您将看到htop将显示与ps的RSS相同的RES。事情是ps在人中提到显示尺寸有些不同:
SIZE和RSS字段不计算流程的某些部分,包括 页表,内核堆栈,结构thread_info和结构 task_struct。通常这通常至少是20 KiB的内存 居民。 SIZE是进程的虚拟大小(代码+数据+堆栈)。
这就是ps和pmap之间的区别,而对于htop和pmap来说实际上是相同的。