虚拟存储器之–垃圾收集

摘自 《深入理解计算机系统》 虚拟存储器

垃圾收集器的由来:

在类似于malloc包这样的显示分配器中,通常是通过malloc 和free来分配和释放堆块,应用程序需要解释所有不再需要使用的已分配块。
未能释放已分配的块是一种常见的存储器错误,如下所示,分配一块临时存储器:
void g(){
int *p =(int *)malloc(1000);
return ;
}
当程序不需要使用p,程序返回前应该释放p,如何在进程中未释放p,或者忘记释放p,则会导致整个应用的生命周期中此内存都会处于已分配状态,会占用目前可使用的堆空间.
垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配块,这些块定义为垃圾,自动回收垃圾的机制我们称之为垃圾回收机制。在一个支持垃圾收集的系统中,应用显式分配堆块,但是可不显式的释放块,垃圾回收机制在c# java Perl语言中均存在此机制,在c语言中,存在一种Mark&Sweep(标记&清除算法),这个算法可以对C和C++提供垃圾回收机制。



垃圾收集器基本要素:

通常垃圾收集器模块的设计是通过两个数组:
一组 存储已分配根节点信息
一组 存储所有的堆空间
当通过存储已分配根节点信息 映射堆空间(一个复杂的结构体树)时,无法进行关联到的堆块时,这个堆块就视为垃圾,可以进行释放,可以进行再分配。

相关阅读:
常见的虚拟存储器错误
malloc free函数的用法
malloc的使用方法及注意事项
为什么要使用动态存储器分配(malloc)