1. 程式人生 > >再論C++之垃圾回收(GC)

再論C++之垃圾回收(GC)

  • 原理:基於引用計數(reference count)。

    這種垃圾回收(gc)演算法無非都是給每一塊分配的記憶體提供引用計數,然後通過智慧指標(smart pointer)自動完成引用計數的加減,如果引用技術減少到零,就代表沒有人使用該記憶體了,這塊記憶體就可以回收了。

    如果可以正確的遵從這種gc的使用規則,也就是說你可以正確無誤的使用智慧指標,那麼理論上來說,就不可能存在記憶體洩漏。
      但是現實並不象想象的那麼單純,那麼美好。一方面,智慧指標的概念仍然沒有被C++社群廣泛的理解應用,而且智慧指標種類繁多,各有各的規則,在程式碼量多了的時候,有時存在這樣那樣的失誤難免;另一方面(應該是更加令人為難的一點),並不是所有人都那麼喜歡用智慧指標,而且原生指標的使用很多情形下避無可避,我們不得不在原生指標與智慧指標之間進行轉換。
      所以這樣的gc的最終結果是,掌握引用計數的規則最終似乎比掌握new/delete的規則容易不了多少,有時甚至讓新接觸該技術的程式設計師感到畏懼。另外,引用計數的引入,出乎意料的產生了一個負作用:除錯記憶體洩漏變得比原先困難多了。
      所以引用計數和智慧指標實現的gc不能從根本上解決記憶體洩漏問題。