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