7

Oldukça standart bir yığın makinesi için bir derleyici yazıyorum. Şimdi çöp toplayıcı eklemek istiyorum. Her aktivasyon kaydında hangi değişkenlerin gc kök olduğunu bilmek için bir çeşit 'yığın haritası' oluşturabileceğimi görebiliyorum. Ancak, yürütme sırasında yığında itilen ara değerlerle nasıl başa çıkılacağımı bilmiyorum. Derlediğim dil, Pascal benzeridir, bu yüzden ihtiyacım yok ve diğer veri türlerinden işaretçileri tanımlamak için etiket kullanmak istemiyorum.Yığın makinesinde gc kökleri nasıl bulunur?

I

  1. zaman içinde herhangi bir noktada yığındaki gc kök değerlerinin nasıl işaretçiler (yani ne olan yığın içinde itilmiş ara değerleri tespit etmek için,/herhangi bir ipucu takdir edecektir gc kökleri).

Çok teşekkür ederim (yani nasıl oluşturmak ve kodlamak 'yığın haritaları') bu kodlama bilgileri

  • Olağan formları! Nicolas

  • cevap

    2

    Basit bir çözüm, her yığın girişinin türünü açıkça depolamaktır. O zaman bir yığın haritasına ihtiyacınız yok; Eğer tip "referans" ise, giriş bir GC köküdür. Bu yaklaşım özellikle hata ayıklama için kullanışlıdır, çünkü yığının (yazılan) içeriğini kolayca görüntüleyebilirsiniz.

    Yığın haritaları gerçekten kullanmak istiyorsanız, her bir komutla gitmek için bir yığın haritası oluşturmak basit bir çözümdür. Bunu, derleme içeriğini derlerken ya da derlenmiş talimatların üzerinde ikinci bir geçiş yaparak takip edebilirsiniz. Daha sonra GC kökleri ararken, yığındaki her bir çerçeve için, geçerli talimatla birlikte gelen haritayı kullanırsınız.

    3

    Başka bir seçenek de bir gölge yığını kullanmaktır: kendinizin koruduğu referans yığını. Bu, uygulamak için en kolay seçenek.