1

我创建了一个应用程序,其大小在我检查使用时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 命令看到的那样。.ie 为什么 2293 与 VSZ (3876) 不同ps -au
  2. 由于虚拟内存的大小非常小,它可以累积在 4k 字节的单页帧(RAM/RSS)中。这意味着,整个过程可以加载到单个帧中,因为 2293 字节小于 4096 字节。那为什么 RSS 448 和 252 小于 2293 或 3876 呢?
4

2 回答 2

3

为什么它显示不同大小的虚拟内存,就像我们使用 size 命令看到的那样。.ie 为什么 2293 与 ps -au 所见的 VSZ (3876) 不同?

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

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

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

于 2013-07-29T09:10:00.253 回答
2

我很确定会u加载一些共享库。这些增加了大小。用ldd ./u来看那些。

至于 VSZ,其值以 1 KiB(1024 字节)为单位:

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

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

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

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

于 2013-07-29T12:03:24.373 回答