簡體   English   中英

使用AutoZone垃圾收集器

[英]Using AutoZone garbage collector

有沒有人嘗試使用Apple提供的autozone垃圾收集器 還是可以指出一個可與C ++一起使用的良好且可配置的工具?

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

編輯2:更精確地說,在實現決策圖庫時,必須實現垃圾收集器。 實際上,我已經為我的庫做了此操作,但是它代表了大約25%的代碼。 這是最復雜的部分:-)所以,是的,我想要一個垃圾收集器:-)是的,我已經在使用RAII技術。 最后,我負擔不起shared_ptr的成本,因為我存儲了數十億個需要進行垃圾回收的對象。

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

這在C ++中並不自然,因此您可能遇到的問題比您要解決的更多。 實際的實現方式主要用於實驗測試,而不用於生產應用。 發揮語言潛能的最佳方法是按照該語言解決問題的方式做事。

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

亞歷山大大帝(Alexandre)編輯2:恐怕不存在魔術。 您為什么認為垃圾收集器會比RAII慣用語更有效。

如果不需要引用計數,則可以使用scoped_ptr。 但是,如果您需要它,除了要隱藏多少錢之外,您還必須為此付費。

也許您的問題是分配大量的對象。 如果它們很小,您會發現“現代C ++設計”(Andrei Alexandrescu)的第4章(小對象分配)真的很有趣。

大多數人傾向於避免使用C ++進行垃圾收集。

一旦您學會了使用RAII來管理資源,並且由於C ++對垃圾回收沒有適當的支持,通常它們就沒有必要了,存在的GC存在兩個問題:

  • 它們不會捕獲所有分配(它們必須保守地猜測是否引用了某些分配)
  • 他們可能不會和破壞者一起玩

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

但是我沒有使用過Autozone,也不知道它在您的情況下還是在一般情況下效果如何。

實際上,垃圾收集是即將到來的C ++ 20XX標准的一部分,但由於實現困難,復雜等原因而被刪除。

因此,可以肯定的是,很多人都避免使用C ++中的GC,但是有足夠的需求,標准委員會正在積極考慮使用它。

蘋果公司的AutoZone是與語言無關的垃圾收集器,可以將其與C ++一起使用。 當然,AutoZone可用於Objective-C(和C)將為良好的基礎實現提供條件。

MacRuby項目以及我相信的其他一些項目也使用AutoZone。 盡管該實現具有特定於x86和ppc架構的位,但它還是設計為可移植的-如有必要,您需要將其移植到其他CPU類型。

收集器具有一個API,可直接用於注冊/注銷對象並表達連接性等。

這並非易事,但肯定是可行的。

不,我沒有嘗試過。 您可以從hp實驗室嘗試操作,更多詳細信息請點擊這里 該收集器可在Linux,* BSD,最新的Windows版本,MacOS X,HP / UX,Solaris,Tru64,Irix和其他一些操作系統上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM