如何在Linux上用C检查堆栈和堆的使用情况?
有没有办法在Linux上检索C中的堆栈和堆使用情况 我想知道堆栈/堆具体占用的内存量。如果您知道进程的pid(例如1234),可以使用打印内存映射的如何在Linux上用C检查堆栈和堆的使用情况?,c,stack,C,Stack,有没有办法在Linux上检索C中的堆栈和堆使用情况 我想知道堆栈/堆具体占用的内存量。如果您知道进程的pid(例如1234),可以使用打印内存映射的pmap 1234命令。您还可以读取/proc/1234/maps文件(实际上是一个文本伪文件,因为它不存在于磁盘上;它的内容由内核惰性地合成)。阅读手册页。它是特定于Linux的,但受其他Unix系统的启发 (最好快速打开、读取然后关闭该伪文件;不要将文件描述符保持在打开状态长达数秒;它更像是一个“管道”式的东西,因为您需要按顺序读取它;它是一个伪
pmap 1234
命令。您还可以读取/proc/1234/maps
文件(实际上是一个文本伪文件,因为它不存在于磁盘上;它的内容由内核惰性地合成)。阅读手册页。它是特定于Linux的,但受其他Unix系统的启发
(最好快速打开、读取然后关闭该伪文件;不要将文件描述符保持在打开状态长达数秒;它更像是一个“管道”式的东西,因为您需要按顺序读取它;它是一个伪文件,不涉及实际的磁盘I/O)
从程序内部,您可以读取/proc/self/maps
文件。在终端中尝试使用cat/proc/self/maps
命令查看运行该cat
命令的映射,并尝试使用cat/proc/$$/maps
查看当前shell的映射
所有这些都为您提供了一个进程的内存映射,它包含了它使用的各种内存段(特别是堆栈、堆和各种动态库的空间)
您还可以使用getrusage
系统调用
还要注意,对于多线程,每个进程都有自己的线程
您还可以解析/proc/$pid/statm
或/proc/self/statm
伪文件,或/proc/$pid/status
或/proc/self/status
一个
但也请参见以获取一些提示
考虑使用(至少在Linux上)进行调试。
valgrind
将告诉您堆的使用情况(即对malloc()
等的所有调用)。您将需要某种类型的堆栈分析器来获取有关堆栈使用情况的信息,尽管不太清楚您到底在寻找什么。也许您正在寻找