如何查看Linux内存中的程序所有堆的地址?
巴扎黑
巴扎黑 2017-04-17 13:16:14
[Linux讨论组]

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

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

巴扎黑
巴扎黑

全部回复(2)
PHP中文网

linux 内存查看方法:meminfo\maps\smaps\status 文件解析

高洛峰

程序使用malloc分配的堆内存地址,记录在那[sic]里?

在内存里。

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

能。

这些记录是一个什么样的形式存在?

glibc 的实现应该是链表。


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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号