Yığın tabanlı bir dilde çöp toplama (GC) gereksinimi nedir? Forth veya RPL gibi bir dilde ( HP hesap makinelerinde ) çöp toplama ihtiyacı var mı?
Çıktı yığınından attığından, herhangi bir ihtiyaç olmayacağını düşünürdüm. Bir şey mi kaçırıyorum?
Yığın tabanlı bir dilde çöp toplama (GC) gereksinimi nedir? Forth veya RPL gibi bir dilde ( HP hesap makinelerinde ) çöp toplama ihtiyacı var mı?
Çıktı yığınından attığından, herhangi bir ihtiyaç olmayacağını düşünürdüm. Bir şey mi kaçırıyorum?
Yanıtlar:
GC normalde öbek üzerinde ayrılan belleğe uygulanır. Forth veya RPL'ye aşina değilim, ancak yığın yoksa ve bunun yerine her şey küresel bir yığında depolanırsa, GC'nin yapacağı hiçbir şey yoktur.
Evet haklısın. Ancak yığın tabanlılık tüm hikayenin sadece bir parçasıdır. Örneğin, Java bayt kodu yorumlayıcısı da yığın tabanlıdır (derlenmiş kod verimlilik nedenleriyle farklı çalışır). Bu bize herhangi bir dilin bir yığın diline dönüştürülebileceğini söyler.
Önemli olan, yığının dışındaki nesneler, geçerli yöntem yürütmesini geçebilen nesnelerdir. Dilin böyle bir şeye sahip olmadığı malloc
veya new
böyle bir nesne olmadığı sürece, hiçbir şey delete
veya GC'ye ihtiyacınız yoktur .
Dinamik bellek tahsisi olmayan bir dil, kullanışlılığı açısından oldukça sınırlıdır.
Dil, dinamik veri yapılarını doğal olarak destekleyecekse çöp toplama gereklidir. C seviyesinin ötesinde bir şey yapmak istiyorsanız neredeyse bir zorunluluktur. Bu olmadan, sadece sabit boyutlu veri yapıları ve belleği kendiniz yönetebilirsiniz. Elbette orijinal Forth'ın yaptığı şey budur, ancak sadece düşük seviyeli sistem kodlaması yapmadıkça bugün yapmak isteyeceğiniz bir şey değildir.
Dil, yığın ayırma yerine statik ayırma kullanıyorsa, çöp toplama gerekmez. Örneğin -s (statik depolama) seçeneğine sahip Fortran 77 , program başlatıldığında tüm belleği ayırır, bu nedenle serbest bırakılacak çalışma zamanında bellek ayırma gerçekleşmez. Bir disiplin gerektirse de, özellikle statik bellek tahsisini kullanmak için simülasyonlar olmak üzere programlar yazmak mümkündür. Statik ayırma, bellek sızıntılarını ortadan kaldırır ve derleyici önbelleğe ne yükleneceğini belirlemek için statik analiz kullanabildiğinden müthiş önbellek performansına yol açar.