gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:33:34 25 4
gpt4 key购买 nike

有什么方法可以在 Linux 上检索 C 中的堆栈和堆使用情况?

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

最佳答案

如果您知道进程的 pid(例如 1234),您可以使用 pmap 1234 命令,它会打印内存映射。您还可以阅读 /proc/1234/maps 文件(实际上是文本伪文件,因为它不存在于磁盘上;其内容由内核延迟合成).阅读proc(5)手册页。它是特定于 Linux 的,但灵感来自 /proc file systems在其他 Unix 系统上。

(您最好快速打开、读取然后关闭该伪文件;不要让其中的文件描述符打开很多秒;它更像是一个类似“管道”的东西,因为您需要顺序读取;它是一个伪文件,不涉及实际的磁盘 I/O)

并且从您的程序内部,您可以读取/proc/self/maps 文件。在终端中尝试
cat/proc/self/maps 命令以查看 virtual address space process的 map 运行 cat 命令和 cat/proc/$$/maps 以查看当前 shell 的映射。

所有这些都为您提供了一个进程的内存映射,它包含它使用的各种内存段(特别是堆栈、堆和各种动态库的空间)。

您还可以使用 getrusage 系统调用。

另请注意,对于多线程,每个 thread一个进程有自己的call stack .

您还可以解析 /proc/$pid/statm/proc/self/statm 伪文件,或 /proc/$pid/status/proc/self/status 之一。

但另见 Linux Ate my RAM一些提示。

考虑使用 valgrind (至少在 Linux 上)调试 memory leaks .

关于c - 如何在 Linux 上使用 C 检查堆栈和堆的使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com