我运行以下简单程序

#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
htoppmap显示相同的虚拟大小(36684),但是它们显示的物理内存不同(htopRES = 321和pmapRSS = 432)。

也许我有些困惑,但是htopRESpmapRSS之间有什么区别吗?

最佳答案

因此,从顶部的手册页中我们可以看到:



对于pmap:



因此,它们似乎是同一回事。但是实际上,如果您还使用ps进行检查,您将看到htop将显示与ps的RSS相同的RES。事情是ps在人中提到显示尺寸有些不同:



这就是ps和pmap之间的区别,而对于htop和pmap来说实际上是相同的。

10-08 08:58