2017-02-20 57 views
-2

我的主要問題是:我如何編寫一個簡單的理解C垃圾收集算法?我正在嘗試學習C(而不是C++)並編寫自己的C垃圾收集算法,但我遇到了問題。我怎麼知道我的結構何時準備好被釋放?我如何知道結構在返回後何時可以在函數內部釋放?我應該使用帶有還是不帶指針的結構?我發現這個職位,上面寫着垃圾收集很簡單: https://cboard.cprogramming.com/c-programming/94327-garbage-collection-not-so-complicated.html容易垃圾收集在C

我想知道什麼「的動態對象存儲在工會與類型標籤和標誌位」,什麼「使用雙間接爲對象」的意思?這真的是一個簡單的方法來做到這一點?我如何用C代碼寫這個?

在此先感謝

+0

通過閱讀鏈接它說它「不那麼複雜」,可能與「很容易」完全不同。如果你對你的任務沒有任何限制,我會認爲你的任務「足夠複雜」 - 最後。 – RuDevel

+0

那麼我會繼續努力學習C. Objective-C使它看起來很容易與ARC。 –

+0

gc本身確實並不複雜。但是,選擇正確的方法,實現算法以滿足您的需求,設計接口以及如何將其集成到應用程序代碼等中需要相當多的經驗。充分尊重:從你的問題來看,我懷疑你至少有後者。熱情往往不足以進行編程。你首先可能想從一些不太複雜的東西開始。 – Olaf

回答

-2

超級簡單的方法來做到垃圾收集會以某種方式保持引用次數的計數有到malloc分配位置。當該計數器達到0時,則釋放()該內存位置。這就是說,在C中進行垃圾收集可能沒有多大意義,因爲在C中,你沒有對象和其他結構,而不是讓自己被「收集」,所以你必須更多地管理你的記憶。直。

+0

這個問題已經不適合堆棧溢出。在C中使用gc有很好的理由。Python的C參考實現還能如何工作?一個gc不會綁定到OOP,你也可以在C中執行OOP。如果經過深思熟慮,它並不複雜。 – Olaf

+0

我確定有很多理由在C中使用它,並且我沒有說它是無效的 - 但考慮到與C++和C相關的問題,我在質疑需求。這很大程度上取決於你在做什麼。 – peeldog

+0

我沒有看到任何支持您的聲明的東西,這是「C與C++」。你在答案中所寫的內容甚至不是關於C++的一部分,你有效地說「C中的gc沒有多大意義」。 – Olaf