开发者社区> 问答> 正文

如何查看Linux内存中的程序所有堆的地址?

Linux c程序每次使用malloc()在堆上上分配内存,就算不释放,但是程序关闭的时候,系统会自行释放所有程序分配的堆。

我想知道程序使用malloc分配的堆内存地址,记录在那里?我是否能够通过一些方法查看具体的地址?这些记录是一个什么样的形式存在(如:一张对应表?)。

展开
收起
a123456678 2016-06-21 16:16:15 2397 0
1 条回答
写回答
取消 提交回答
  • 程序使用malloc分配的堆内存地址,记录在那[sic]里?
    在内存里。

    我是否能够通过一些方法查看具体的地址?
    能。

    这些记录是一个什么样的形式存在?
    glibc 的实现应该是链表。

    你要知道,malloc(3) 是库函数而不是系统调用——也就是说,它是由库实现的。更准确地说,默认的 malloc(如果你不用 jemalloc 之类的内存分配器的话)是由 glibc 实现的。

    smaps 当然可以查看进程的内存布局。但是你只能看到 Linux 给进程分配的内存地址,而看不到 malloc(3) 给各种数据分配的具体情况,因为那不归 Linux 管。malloc(3) 在堆上分配内存给你的程序,而 brk(2) 向操作系统请求更改堆的大小。

    2019-07-17 19:45:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Linux系统通过fail2ban对暴力破解进行防护 立即下载
《3-Alibaba Dragonwell 在Alibaba Cloud Linux 3上的应用及优化》 立即下载
Alibaba Cloud Linux 3 技术揭秘 立即下载