2009-08-04 76 views
1

有沒有人試過使用Apple的autozone garbage collector?還是你可以指出一個很好的可配置的C++?使用AutoZone垃圾回收器

編輯:我工作的決策圖(如BDD),所以我想測試一下,如果在這種情況下使用垃圾收集器管理內存是有效的。

編輯2:更確切地說,當爲決策圖實現庫時,您必須實現垃圾回收器。事實上,我已經爲我的圖書館做了這件事,但它代表了大約25%的代碼。它是最複雜的部分:-)是的,我想要一個垃圾回收器:-)是的,我已經使用RAII技術。最後,我無法承擔shared_ptr的成本,因爲我存儲了數十億個需要垃圾收集的對象。

回答

1

不,我沒有試過。你可以嘗試this從惠普實驗室,與更多細節去here。這個收集器適用於Linux,* BSD,最近的Windows版本,MacOS X,HP/UX,Solaris,Tru64,Irix和其他一些操作系統。

2

大多數人傾向於避免使用C++中的垃圾收集器。

他們一般都是沒有必要的,一旦你學會使用RAII來管理您的資源,因爲C++沒有垃圾收集適當的支持,存在的GC的有幾個問題:

  • 他們不要抓住每一個分配(他們必須做出一些分配是否引用或不是一個保守的估計)
  • 他們可能沒有發揮好與析構函數

當然,在有些情況下C++中的GC是有用。但95%的情況下,您只需通過自己學習適當的內存管理技術(RAII)就可以更好地服務。

但我沒有使用Autozone,也不知道它在你的情況下或一般情況下的工作情況。

3

您是否已經分析過您是否真的需要隱式垃圾回收庫?你確定它不僅僅是java(或者Objective C,...)懷舊嗎?

這在C++中並不自然,所以您可能會遇到比解決問題更多的問題。實際實現主要用於實驗測試,而不是用於生產應用程序。擠壓語言潛力的最好辦法就是用這種語言解決問題。

首先檢查顯式垃圾回收(boost :: shared_ptr和friends)是否滿足您的需求,並避免在可能的情況下引入複雜性。

後亞歷山大編輯2:魔術不存在恐怕。你爲什麼認爲垃圾收集器比RAII成語更有效率?

如果你不需要引用計數,你可以使用scoped_ptr。但是,如果你需要它,除了隱藏它多少之外,你將不得不爲此付出代價。

也許你的問題是分配dinamically這麼多的對象。如果它們是小型的,你會發現「現代C++設計」(Andrei Alexandrescu)的第4章(小對象分配)非常有趣。

+0

你也可以看看指針容器。他們沒有內存開銷: http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html – 2009-08-10 20:05:52

+0

而這裏的Small Object Allocator的實現:http:// loki-lib。 cvs.sourceforge.net/loki-lib/loki/include/loki/SmallObj.h?view=markup – 2009-08-12 16:01:51

2

事實上,垃圾收集是即將到來的C++ 20XX標準的一部分,但被丟棄的實施,複雜等困難的原因...

所以,當然,很多人避免GC在C++中,但標準委員會正在積極考慮這一要求。

Apple's AutoZone是一種語言不可知的垃圾收集器,可以彎曲用於C++。當然,AutoZone適用於Objective-C(和C)將爲基礎實施做好準備。

AutoZone也被MacRuby項目和我相信的其他一些項目使用。它被設計爲可移植的,儘管實現具有特定於x86和ppc體系結構的位 - 如果需要,您需要將其移植到其他CPU類型。

收集器具有可直接用於註冊/註銷對象和快速連接等的API ...

它不會是容易的,但肯定是可行的。