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