我创建了一个应用程序,当我使用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
ps -au
所见的VSZ(3876)不同?答案 0 :(得分:3)
为什么我们使用size命令显示不同大小的虚拟内存。 .i.e为什么2293与VSZ(3876)不同,如ps -au所示?
堆栈和堆不存储在二进制文件中,它们仅在运行时创建。这就是为什么二进制文件的text
,data
和bss
部分的大小不等于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)
或类似的库或内核调用),或者它还没有加载所有共享库(它们是部分按需加载。)