+ -
当前位置:首页 → 问答吧 → 请教一个关于malloc的理论性的问题

请教一个关于malloc的理论性的问题

时间:2010-07-29

来源:互联网

我们知道malloc的大致实现是这样的:运行库(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

相关阅读 更多

热门下载

更多