如何在Linux上用C检查堆栈和堆的使用情况?

如何在Linux上用C检查堆栈和堆的使用情况?,c,stack,C,Stack,有没有办法在Linux上检索C中的堆栈和堆使用情况 我想知道堆栈/堆具体占用的内存量。如果您知道进程的pid(例如1234),可以使用打印内存映射的pmap 1234命令。您还可以读取/proc/1234/maps文件(实际上是一个文本伪文件,因为它不存在于磁盘上;它的内容由内核惰性地合成)。阅读手册页。它是特定于Linux的,但受其他Unix系统的启发 (最好快速打开、读取然后关闭该伪文件;不要将文件描述符保持在打开状态长达数秒;它更像是一个“管道”式的东西,因为您需要按顺序读取它;它是一个伪

有没有办法在Linux上检索C中的堆栈和堆使用情况

我想知道堆栈/堆具体占用的内存量。

如果您知道进程的pid(例如1234),可以使用打印内存映射的
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()
等的所有调用)。您将需要某种类型的堆栈分析器来获取有关堆栈使用情况的信息,尽管不太清楚您到底在寻找什么。也许您正在寻找