运行时虚拟内存的大小

时间:2013-07-29 08:15:54

标签: linux

我创建了一个应用程序,当我使用size进行检查时,其大小显示为

  admin@pc:~/Desktop$ size u
  text     data     bss     dec     hex  filename  
  1725     552       16    2293     8f5   u

在运行时使用ps -au进行检查

admin@pc:~/Desktop$ ps -au  
USER    PID    %CPU %MEM  VSZ    RSS TTY      STAT START   TIME COMMAND  
admin   16730  0.0  0.0   3876   448 pts/2    S+   15:48   0:00 ./u  
admin   16731  0.0  0.0   3876   252 pts/2    S+   15:48   0:00 ./u
  1. 为什么我们使用size命令显示不同大小的虚拟内存。 .i.e为什么2293与ps -au所见的VSZ(3876)不同?
  2. 由于虚拟内存的大小非常小,它可以在4k字节的单页帧(RAM / RSS)中累积。这意味着,整个过程可以加载到单帧中,因为2293字节小于4096字节。那么为什么RSS 448和252小于2293或3876?

2 个答案:

答案 0 :(得分:3)

  

为什么我们使用size命令显示不同大小的虚拟内存。 .i.e为什么2293与VSZ(3876)不同,如ps -au所示?

堆栈和堆不存储在二进制文件中,它们仅在运行时创建。这就是为什么二进制文件的textdatabss部分的大小不等于VSZ

  

由于虚拟内存的大小非常小,它可以在4k字节的单页帧(RAM / RSS)中累积。这意味着,整个过程可以加载到单帧中,因为2293字节小于4096字节。那么为什么RSS 448和252小于2293或3876?

VSZ以1024字节为单位报告。换句话说,3876代表3969024字节。

答案 1 :(得分:2)

我很确定u加载了一些共享库。这些增加了大小。使用ldd ./u查看这些内容。

对于VSZ,该值为1 KiB(1024字节)单位:

  

以KiB为单位的VSZ虚拟内存大小(1024字节单位)。

(来源:ps(1)的Ubuntu手册页)。

虚拟大小包含您的进程所需的所有内存,还包括为您的进程保留但实际上并未使用的页面。

RSS是当前位于RAM中的内存量。这两个进程实际上保留了相同数量的内存,但是第二个进程实际上没有分配太多内存(使用malloc(3)或类似的库或内核调用),或者它还没有加载所有共享库(它们是部分按需加载。)