Was ist für die Garbage Collection (GC) in einer Stack-basierten Sprache erforderlich? Gibt es in einer Sprache wie Forth oder RPL (auf HP- Rechnern ) eine Notwendigkeit für die Speicherbereinigung?
Ich würde denken, da die Ausgabe vom Stapel gefallen ist, gäbe es keine Notwendigkeit. Vermisse ich etwas?
garbage-collection
stack-oriented
Todd Moses
quelle
quelle
Ja, du hast Recht. Die Stapelbasiertheit ist jedoch nur ein Teil der gesamten Geschichte. Beispielsweise ist der Java-Bytecode-Interpreter ebenfalls stapelbasiert (der kompilierte Code funktioniert aus Effizienzgründen anders). Dies sagt uns, dass jede Sprache in eine Stapelsprache umgewandelt werden kann.
Entscheidend sind die Objekte außerhalb des Stacks, die die aktuelle Methodenausführung überleben können. Solange die Sprache nichts wie
malloc
oder hatnew
, gibt es keine solchen Objekte und Sie brauchendelete
weder GC noch GC.Eine Sprache ohne dynamische Speicherzuweisung ist in ihrer Nützlichkeit ziemlich begrenzt.
quelle
Garbage Collection ist erforderlich, wenn die Sprache von Natur aus dynamische Datenstrukturen unterstützt. Dies ist fast eine Notwendigkeit, wenn Sie etwas tun möchten, das über das Niveau von C hinausgeht. Ohne dies haben Sie nur Datenstrukturen mit fester Größe und verwalten den Speicher selbst. Das ist natürlich das, was Original Forth tut, aber es ist wahrscheinlich nicht etwas, was Sie heute tun möchten, es sei denn, Sie führen nur Low-Level-Systemcodierungen durch.
quelle
Garbage Collection wird nicht benötigt, wenn die Sprache statische Zuweisung anstelle von Stapelzuweisung verwendet. Zum Beispiel reserviert Fortran 77 mit der Option -s (statischer Speicher) den gesamten Speicher, wenn das Programm gestartet wird. Daher erfolgt zur Laufzeit keine Speicherzuweisung, um freigegeben zu werden. Während es einige Disziplin erfordert, ist es möglich, Programme zu schreiben, insbesondere Simulationen, um die statische Speicherzuweisung zu verwenden. Die statische Zuordnung beseitigt alle Speicherverluste und führt zu einer hervorragenden Cache-Leistung, da der Compiler mithilfe der statischen Analyse ermitteln kann, was in den Cache geladen werden soll.
quelle