有没有办法在Linux上使用C语言检索堆栈和堆使用情况?
我想知道堆栈/堆所占用的内存量。
我想知道堆栈/堆所占用的内存量。
pmap 1234
命令,该命令会打印内存映射。您还可以阅读/proc/1234/maps
文件(实际上是一个文本伪文件,因为它不存在于磁盘上;其内容由内核懒惰地合成)。请阅读proc(5)手册。它是Linux特定的,但受其他Unix系统上的/proc
文件系统启发。从程序内部,您可以读取/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 Ate my RAM获取一些提示。
valgrind
会告诉你关于堆使用情况的信息(即所有对malloc()
等函数的调用)。但是,如果你想获取有关栈使用情况的信息,你需要一些类型的堆栈分析器,尽管不太清楚你具体要查找什么。 - Kerrek SB