运行一个简单的程序,简单的等待在while循环中,我很想知道进程的内存统计信息。我正在运行的程序如下
#include<stdio.h>
int main()
{
while(1)
{
}
return 0;
}
编译时,上述程序生成7950字节的可执行文件(约2页)。但是/proc/pid/statm
将rss大小设为72页?谁能在这里提供一些见解?
此致 Meraj
答案 0 :(得分:2)
在程序运行时,需要将更多内容驻留在内存中,而不仅仅是可执行文件中的代码和数据段。例如,它可能还有来自堆栈,堆,共享库和文件映射的驻留内存页。
如果您想查看驻留页面的使用方式,可以查看/proc/<pid>/smaps
- 特别是 Rss:字段。
/proc/<pid>/maps
(没有&#39; s&#39;)将为您提供更易读的流程映射概述。请注意,例如堆栈(或多个线程的堆栈)和堆计数也是映射。
这是cat /proc/self/maps
的一些示例输出(将打印cat
进程本身的映射)。我在右边添加了箭头(可能需要滚动)来解释一些不同的映射是什么。一旦你知道了,你可以查看cat /proc/<pid>/smaps
以查看每个映射的常驻大小。
00400000-0040c000 r-xp 00000000 08:01 3409248 /bin/cat <- text (code) segment 0060b000-0060c000 r--p 0000b000 08:01 3409248 /bin/cat <- read-only data segment (for e.g. string literals) 0060c000-0060d000 rw-p 0000c000 08:01 3409248 /bin/cat <- read/write data segment 01d6a000-01d8b000 rw-p 00000000 00:00 0 [heap] 7f23d2b5c000-7f23d3328000 r--p 00000000 08:01 8126750 /usr/lib/locale/locale-archive <- memory-mapped file (actually, executables and shared libraries are memory-mapped files too) 7f23d3328000-7f23d34e2000 r-xp 00000000 08:01 11155466 /lib/x86_64-linux-gnu/libc-2.19.so ^ 7f23d34e2000-7f23d36e1000 ---p 001ba000 08:01 11155466 /lib/x86_64-linux-gnu/libc-2.19.so | Various mappings for 7f23d36e1000-7f23d36e5000 r--p 001b9000 08:01 11155466 /lib/x86_64-linux-gnu/libc-2.19.so | glibc 7f23d36e5000-7f23d36e7000 rw-p 001bd000 08:01 11155466 /lib/x86_64-linux-gnu/libc-2.19.so v 7f23d36e7000-7f23d36ec000 rw-p 00000000 00:00 0 <- Anonymous mapping (MAP_ANONYMOUS) ... 7fffbc234000-7fffbc255000 rw-p 00000000 00:00 0 [stack] 7fffbc3a1000-7fffbc3a3000 r-xp 00000000 00:00 0 [vdso] ^ 7fffbc3a3000-7fffbc3a5000 r--p 00000000 00:00 0 [vvar] | Internal stuff related to how some ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] v system calls are implemented