2016-04-21 23 views
0

ここでは、Cにコンパイルされたアセンブリにガベージコレクション言語があるとします。では、Cにコンパイルされたときのガベージコレクションの仕組みは?それは完全に決定的になりますか?または、それは定期的に実行され、ゴミを収集する別のプログラムとして、結果のプログラムに含まれていますか?これはたぶん愚かではないにしても非常に簡単ですが、いくつかの説明が必要でした。Cコンパイル言語でのガベージコレクション

+0

「コンパイル済み」とはどういう意味ですか? – jdarthenay

+0

nimがガベージコレクションされていることを正しく覚えていれば、C、またはnimの実装にコンパイルするようなスキームの実装。 – meguli

+0

Cコードが生成されているとよく分かりますか?その場合、誰も答えを知っていないなら、おそらく、非常に単純なプログラムの生成されたCコードを見てみることができます。 – jdarthenay

答えて

0

コンパイルされた言語で同様のことを行う方法の1つは、iOSのARC reference countingで行われます。それは技術的にガベージコレクションではありませんが、似たようなものです。メモリを解放するかどうかを確認するために、ヒープを指し示して割り当てられたアドレスを定期的にプログラムメモリで検索する必要があります。

0

Bohem gcが存在します。ただし、デッドオブジェクトへのポインタになるように正しい範囲に整数がある場合、グラフ全体が漏れる可能性があります。 http://hboehm.info/gc/すべてが悪い選択です。

1

C言語にコンパイルしていても、そのような実装は通常、元の言語のランタイムライブラリにリンクします。そのライブラリには、より高いレベルの言語データ用のガベージコレクタが含まれています。 C言語で元の言語のデータを表現するために使用されるデータ構造には、ガベージコレクタに必要な追加フィールドが含まれています。

彼らが使用するかもしれない別のテクニックはconservative garbage collectionです。