扫码关注官方订阅号
Linux c程序每次使用malloc()在堆上上分配内存,就算不释放,但是程序关闭的时候,系统会自行释放所有程序分配的堆。
linux 内存查看方法:meminfo\maps\smaps\status 文件解析
程序使用malloc分配的堆内存地址,记录在那[sic]里?
在内存里。
我是否能够通过一些方法查看具体的地址?
能。
这些记录是一个什么样的形式存在?
glibc 的实现应该是链表。
你要知道,malloc(3) 是库函数而不是系统调用——也就是说,它是由库实现的。更准确地说,默认的 malloc(如果你不用 jemalloc 之类的内存分配器的话)是由 glibc 实现的。
malloc(3)
smaps 当然可以查看进程的内存布局。但是你只能看到 Linux 给进程分配的内存地址,而看不到 malloc(3) 给各种数据分配的具体情况,因为那不归 Linux 管。malloc(3) 在堆上分配内存给你的程序,而 brk(2) 向操作系统请求更改堆的大小。
brk(2)
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
linux 内存查看方法:meminfo\maps\smaps\status 文件解析
在内存里。
能。
glibc 的实现应该是链表。
你要知道,
malloc(3)
是库函数而不是系统调用——也就是说,它是由库实现的。更准确地说,默认的 malloc(如果你不用 jemalloc 之类的内存分配器的话)是由 glibc 实现的。smaps 当然可以查看进程的内存布局。但是你只能看到 Linux 给进程分配的内存地址,而看不到
malloc(3)
给各种数据分配的具体情况,因为那不归 Linux 管。malloc(3)
在堆上分配内存给你的程序,而brk(2)
向操作系统请求更改堆的大小。