请教一个关于malloc的理论性的问题
时间:2010-07-29
来源:互联网
我们知道malloc的大致实现是这样的:运行库(glibc)向操作系统内核“批发”了一块较大的堆空间,然后“零售”给程序用。当全部“售完”或者程序有大量的内存需求时,运行库(glibc)再根据实际需求向操作系统“进货”。运行库(glibc)在向程序零售堆空间时,必需管理它批发来的堆空间,往往涉及到比较复杂的堆的分配算法。
我的问题时:运行库(glibc)在管理从内核批发来的堆空间的时候,肯定需要为每个进程维护一些数据结构,那么这些数据结构在进程异常退出的时候是如何被删除的呢?运行库怎么知道某个进程退出了呢?
谢谢!
我的问题时:运行库(glibc)在管理从内核批发来的堆空间的时候,肯定需要为每个进程维护一些数据结构,那么这些数据结构在进程异常退出的时候是如何被删除的呢?运行库怎么知道某个进程退出了呢?
谢谢!
作者: rc_hz 发布时间: 2010-07-29
确信 glibc先批发再零售?
作者: hellioncu 发布时间: 2010-07-29
是的,确信
作者: rc_hz 发布时间: 2010-07-29
异常退出后, 直接让OS回收?
作者: OwnWaterloo 发布时间: 2010-07-29
例如Linux,malloc内部使用了brk(),sbrk()这种系统调用来分配内存。brk()系统调用就是楼主所说的批发内存的。批发了之后在OS会为该进程保存一项数据,表明这个进程使用了某块内存。如果进程退出,OS就会把该进程所有已分配的内存项目回收。
作者: davelv 发布时间: 2010-07-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28