我试图了解我的嵌入式 Linux 应用程序的内存使用情况。/proc/pid/maps实用程序/文件似乎是查看详细信息的好资源。不幸的是,我不明白所有的栏目和条目。
/proc/pid/maps
匿名 inode 0条目是什么意思? 这些似乎是一些较大的内存段。
内存映射不仅用于将文件映射到内存,而且还是从内核请求 RAM 的工具。这些是 inode 0条目-堆、堆、 bss 段等
/proc/$PID/maps中的每一行描述了进程或线程中连续虚拟内存的一个区域。每一行都有以下字段:
/proc/$PID/maps
address perms offset dev inode pathname 08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
-
r
w
x
p
s
mprotect
mmap
[heap]
[stack]
[vdso]
您可能会注意到许多匿名区域。这些通常由 mmap创建,但不附加到任何文件。它们用于许多其他事情,比如共享内存或堆上没有分配的缓冲区。例如,我认为 pthread 库使用匿名映射区域作为新线程的堆栈。
请检查: http://man7.org/linux/man-pages/man5/proc.5.html
address perms offset dev inode pathname 00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
Perms 字段是一组权限:
r = read w = write x = execute s = shared p = private (copy on write)
偏移量字段是文件/其他内容的偏移量;
Dev 是设备(主要: 次要) ;
Inode 是该设备上的 inode。0表示没有 inode 与内存区域相关联,BSS (未初始化的数据)就是这种情况。
在 Linux 2.0下,没有给出路径名的字段。