Yığın tabanlı bir dilde çöp toplamaya ihtiyaç var mı?


Yanıtlar:


14

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.


2
İlk günlerde okuduğum Forth programlarının tipik bellek kullanım modeli, önceden hazırlanmış statik küresel veri adresleri kullanmaları nedeniyle montaj programları gibiydi. Forth, yığın ve belirli adresler arasında veri aktarma yeteneğine sahip olduğundan bu çalışır. Ayrıca adresleri hesaplama yeteneğine sahiptir. Böylece bir yığın kavramına dayalı bir ayırıcı kütüphanesi oluşturmak mümkün olacaktır ve ayırıcı kütüphanesi yığının sonlu boyutu ile başa çıkmak için bir yol gerektirecektir. Bir Forth kullanıcısı bu yolda ilerlediyse, GC'yi isteyebilir ve uygulayabilir.
cardiff space man

13

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ığı mallocveya newböyle bir nesne olmadığı sürece, hiçbir şey deleteveya 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.


son satırı kabul ettiğimden emin değilim, java bayt kodu yararlı değil mi?
jk.

@jk., java bayt kodu dinamik bellek ayırma özelliğine sahiptir.
Peter Taylor

1
Aslında, yığın tabanlı birkaç genel amaçlı dil vardır. Göz at factorcode.org
Yam Marcovic

1
Aslında faktör toplanan çöp
Andrea

1

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.


1

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.