2012-11-16 49 views
-6

我想知道我是否可以看到C或C++中的垃圾收集器如何工作?我們可以用C或C++手動操作垃圾收集器嗎?

它背後的算法是什麼選擇內存中未使用的值?

誰能告訴我GC如何在C中工作?

+1

如果您使用自己的垃圾回收器,當然。如果你不這樣做,那麼答案是否定的,因爲沒有spoo - 我的意思是沒有垃圾收集器。 – Cornstalks

+0

http://www.parashift.com/c++-faq-lite/garbage-collector-basics.html – Lundin

+0

看看http://stackoverflow.com/questions/24891/c-memory-management – UmNyobe

回答

4

這兩種語言都沒有垃圾回收器。至少,不是標準兼容實現的一部分。

請注意,C++有語言限制,這使得它很難實現垃圾回收。其中一些規則在最新的標準C++ 11中已經放寬了。所以原則上現在可以實現符合標準的C++垃圾收集器。

C++中的標準方法是使用smart pointers來自動管理內存。

有一個interesting article here,包含一些有用的鏈接。從評論中你可以看出,GC與習慣C++的協調是多麼的困難。

+0

如果它沒有不是爲什麼某些情況下會打印垃圾值? –

+0

@ l4zyw0rm我不確定你的意思,但總的來說,打印內容和收集內容的能力是斷開的。 – juanchopanza

+0

比垃圾值呢?有時打印垃圾值,這些值來自哪裏? –

5

C和C++沒有垃圾回收。

3

請查看本文/文章:從漢斯·貝姆

+0

是的,我正在尋找這!謝謝 –

2

A garbage collector for C and C++雖然在標準C和C++沒有垃圾收集的支持,至少有一個流行和漂亮的便攜式實施稱爲Boehm-Demers-Weiser conservative garbage collector

保守的垃圾收集器通過假設所有看起來像指針的東西都是一個指針,即使它是例如現實中的整數。所以,他們有時可能無法回收未引用的對象。此外,一些像xoring指針這樣的技巧可以隱藏指針。但根據我的經驗,他們似乎在實踐中工作得很好。

0

在C中,垃圾收集是完全手動的;您需要跟蹤任何使用malloc()或相關功能分配的任何內容,因此您可以在完成後使用free()發佈它,而且這絕不會自動完成。

C++通常是相同的;您需要delete任何分配有new(和delete[]任何陣列分配new[])的任何東西。但是,這個過程可以(也應該)通過創建管理動態資源的對象來部分自動化,並在解構器中釋放它們。這種技術通常被稱爲RAII,最常見的例子是標準庫中的容器和智能指針。

這兩種語言都沒有自動垃圾回收功能,或者沒有任何方式來確定是否有任何動態對象正在使用;你總是需要自己管理動態資源。有一些非標準的擴展提供垃圾收集,但我對它們一無所知。