2016-10-11 10 views
0

自動ガベージコレクタを持たないCプログラミング言語のインスタンスを実行します。私は、Boehm-Demers-Weiserガベージコレクタやその他の実装など、C用の他のガベージコレクタを見つけました。しかし、彼らはすべて同じ言語(C)またはCPPになっています。 PythonにはC用のAPIがあり、ヒープ内にPyObjectを作成するのに使うことができ、参照カウンタが付属しています。 Pythonを使ってCのガベージコレクタを作成することは可能ですか? CPython APIを使用してオブジェクトを作成したり、組み込みインタプリタにオブジェクトを作成したりしますか?どのようにしてC用の自動ガベージコレクタを作成できますか?ある言語の自動ガベージコレクタを別の言語で記述することはできますか?

上記の内容が間違っている場合は、私にご容赦ください。私はこれに新しいです。

+0

これは実際のユースケースですか?幅広い意見を求めるよりも、具体的になることができますか? –

+0

C自体には、組み込みのガベージコレクタがありません。私たちはいつも外部ライブラリ/モジュールを使用して、それらのライブラリからのメモリ割り当て関数を使用してその機能を提供することができます。私の使用例は、Python言語を使用してCのガベージコレクタを実装することです。それは、CのCPython APIを使ってオブジェクトを作成し、PythonでCのメモリ(ヒープ)(ガベージコレクション)を管理するようなものです。 @シヴァスブラマニャンアルナチャラム –

答えて

1

CとPythonは2つの非常に異なる言語です。 Cはコンパイルされた言語ですが、Pythonはと解釈され、と解釈されます。

コンパイルされた言語(CやC++など)では、ソースコードがコンパイラによってマシンコードに直接変換され、実行時にコンピュータによって直接実行されます。つまり、コンピュータは正確にソースコード言った。あなたが悪いCプログラム記述する場合:

int main(){ 
    char *ptr = malloc(sizeof(char)); 
    ptr = NULL; 
    return 0; 
} 

を次に、コンピュータを忠実にそして忘れますptr、でその場所を格納し、メモリのchar形のブロックを割り当てます。ガベージコレクトされた環境では、ptr = NULLの行には、割り当てられたメモリにアクセスできないため、割り当てられたメモリが他のプログラムで使用できるようになりますが、Cでコンパイルすると、プログラムが終了するまでそのメモリが割り当てられます。

Boehm-Demers-Weiserのガベージコレクションは実際にはモジュール内に隠されており、危険なmalloc関数をゆるいポインタを追跡する独自の安全なGC_MALLOC関数で置き換えていますする必要はありません。

PythonはCと似ていません。コード行は、別のプログラム(通常はC言語で書かれています)によって解釈され、コンピュータにあなたが何をしたいかを指示します。基礎となるコード(メモリアドレス、ポインタ割り当て、配列管理)はPythonでは完全に隠されています。

短く:いいえ、Pythonインタプリタが既にC言語のプログラムを使用しているため、PythonがCをガベージコレクトするように指定することはできませんコレクション。

関連する問題