如果您知道进程的 pid(例如 1234),则可以使用pmap 1234
命令,打印内存映射。您还可以阅读/proc/1234/maps
文件(实际上是一个文本文件伪文件因为它不存在于磁盘上;它的内容是由内核延迟合成的)。读proc(5) http://man7.org/linux/man-pages/man5/proc.5.html手册页。它是 Linux 特定的,但灵感来自/proc文件系统 https://en.wikipedia.org/wiki/Procfs在其他 Unix 系统上。
(you'll better open, read, then close that pseudo-file quickly; don't keep a file descriptor on it open for many seconds; it is more a "pipe"-like thing, since you need to read it sequentially; it is a pseudo-file without actual disk I/O involved)
从你的程序内部,你可以读到/proc/self/maps
文件。尝试一下
cat /proc/self/maps
在终端中命令查看虚拟地址空间 https://en.wikipedia.org/wiki/Virtual_address_space的地图process https://en.wikipedia.org/wiki/Process_%28computing%29运行那个cat
命令,以及cat /proc/$$/maps
查看当前 shell 的映射。
所有这些都为您提供了进程的内存映射,并且它包含它使用的各种内存段(特别是堆栈、堆和各种动态库的空间)。
您还可以使用getrusage
系统调用。
另请注意,对于多线程,每个thread https://en.wikipedia.org/wiki/Thread_%28computing%29一个进程有自己的调用栈 https://en.wikipedia.org/wiki/Call_stack.
您还可以解析/proc/$pid/statm
or /proc/self/statm
伪文件,或/proc/$pid/status
or /proc/self/status
one.
但另请参阅Linux 吃掉了我的 RAM http://www.linuxatemyram.com/一些提示。
考虑使用valgrind http://valgrind.org/(至少在 Linux 上)进行调试内存泄漏 https://en.wikipedia.org/wiki/Memory_leak.