加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 23:02:11 所属栏目:Linux 来源:网络整理
导读:有没有办法在 Linux上的C中检索堆栈和堆使用? 我想知道堆栈/堆专门占用的内存量. 解决方法 如果您知道进程的pid(例如1234),则可以使用pmap 1234命令打印内存映射.您还可以读取/ proc / 1234 / maps文件(实际上是一个文本伪文件,因为它不存在于磁盘上;其内容
有没有办法在 Linux上的C中检索堆栈和堆使用?

我想知道堆栈/堆专门占用的内存量.

解决方法

如果您知道进程的pid(例如1234),则可以使用pmap 1234命令打印内存映射.您还可以读取/ proc / 1234 / maps文件(实际上是一个文本伪文件,因为它不存在于磁盘上;其内容由内核懒惰地合成).阅读 proc(5)手册页.它特定于Linux,但在其他Unix系统上受到 /proc file systems的启发.

(你最好打开,读取,然后快速关闭那个伪文件;不要让文件描述符在它上面打开很多秒;它更像是一个“管道”的东西,因为你需要按顺序读取它;它是一个没有实际磁盘I / O的伪文件)

从程序内部,您可以读取/ proc / self / maps文件.尝试在终端中使用cat / proc / self / maps命令查看运行该cat命令的process的virtual address space映射,以及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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读