2016-04-21 10 views
0

Nehmen wir an, ich habe eine Garbage Collection-Sprache, die zu C kompiliert wird und dadurch zur Assembly. Dann, wie Garbage Collection funktioniert, wenn es zu C kompiliert wird? Wird es vollständig deterministisch? Oder ist es im resultierenden Programm als ein anderes Programm enthalten, das periodisch abläuft und Müll sammelt? Dies ist wahrscheinlich eine sehr einfache, wenn auch nicht alberne Frage, aber ich wollte einige Klarstellungen.Garbage Collection in einer C-kompilierten Sprache

+0

Was meinst du "kompiliert nach C"? – jdarthenay

+0

Wie Schema-Implementierungen, die bis C kompilieren, oder nim-Implementierung, wenn ich mich richtig erinnere, dass Nim Garbage Collection ist. – meguli

+0

Wenn ich gut verstehe, wird C-Code generiert? In diesem Fall, wenn niemand die Antwort kennt, können Sie vielleicht versuchen, den generierten C-Code von sehr einfachen Programmen zu betrachten. – jdarthenay

Antwort

0

Eine Möglichkeit, etwas ähnliches in einer kompilierten Sprache zu tun, ist in iOS mit ARC reference counting. Es ist technisch gesehen keine Müllsammlung, sondern etwas Ähnliches. Sie müssten den Speicher Ihres Programms regelmäßig nach Adressen durchsuchen, die zugewiesen wurden und auf den Heap zeigen, um zu sehen, ob es in Ordnung ist, den Speicher freizugeben oder nicht.

0

Bohem gc existiert; Wenn Sie jedoch eine Ganzzahl im rechten Bereich haben, um ein Zeiger auf ein totes Objekt zu sein, können ganze Graphen undicht werden. http://hboehm.info/gc/ In allen eine schlechte Wahl.

1

Auch wenn es nach C kompiliert wird, werden solche Implementierungen normalerweise in einer Laufzeitbibliothek für die Originalsprache verknüpft. Diese Bibliothek enthält den Garbage Collector für die Daten der höheren Ebene. Und die Datenstrukturen, die verwendet werden, um die Daten der ursprünglichen Sprache in C darzustellen, enthalten zusätzliche Felder, die von dem Garbage Collector benötigt werden.

Eine andere Technik, die sie verwenden können, ist conservative garbage collection.