Linux c程序每次使用malloc()在堆上上分配内存,就算不释放,但是程序关闭的时候,系统会自行释放所有程序分配的堆。
我想知道程序使用malloc分配的堆内存地址,记录在那里?我是否能够通过一些方法查看具体的地址?这些记录是一个什么样的形式存在(如:一张对应表?)。
程序使用malloc分配的堆内存地址,记录在那[sic]里?
在内存里。
我是否能够通过一些方法查看具体的地址?
能。
这些记录是一个什么样的形式存在?
glibc 的实现应该是链表。
你要知道,malloc(3) 是库函数而不是系统调用——也就是说,它是由库实现的。更准确地说,默认的 malloc(如果你不用 jemalloc 之类的内存分配器的话)是由 glibc 实现的。
smaps 当然可以查看进程的内存布局。但是你只能看到 Linux 给进程分配的内存地址,而看不到 malloc(3) 给各种数据分配的具体情况,因为那不归 Linux 管。malloc(3) 在堆上分配内存给你的程序,而 brk(2) 向操作系统请求更改堆的大小。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。