上面就是全部的數據結構,需要說明的是:1。 那個marker是一個函數指針,它的第二個參數也是個函數指針。2。 了解C++的朋友可能會說,析構函數不能對其取地址。當然這里用了一個小小的技巧---對析構函數進行了包裝。
3。 注意gc_mark不是一個bool變量,它會隨著每次分配而++,在collect之前,會用++mark來標記所有可達內存塊,即node.mark = gc_mark; 于是,所有mark值和gc_mark不等的內存塊就需要被回收啦。
從下篇開始就逐個介紹各個函數了,最后再用宏或模板做出來一些語法糖,把見不得人的東西都包起來,就大功告成了。