上面就是全部的数据结构,需要说明的是:1。 那个marker是一个函数指针,它的第二个参数也是个函数指针。2。 了解C++的朋友可能会说,析构函数不能对其取地址。当然这里用了一个小小的技巧---对析构函数进行了包装。
3。 注意gc_mark不是一个bool变量,它会随着每次分配而++,在collect之前,会用++mark来标记所有可达内存块,即node.mark = gc_mark; 于是,所有mark值和gc_mark不等的内存块就需要被回收啦。
从下篇开始就逐个介绍各个函数了,最后再用宏或模板做出来一些语法糖,把见不得人的东西都包起来,就大功告成了。