3

私がcpythonについて読んだことから、相互に指しているオブジェクトを検出/解放するための参照カウント+何か余分なものがあるようです(間違っている場合は訂正してください)。誰かが何か特別なことを説明できますか?また、これはサイクルリークがないことを保証しますか?そうでない場合は、参照カウントに追加してリークしないようにすることが証明されているアルゴリズムの研究はありますか?これは、非参照カウントトレースgcを頻繁に実行しているだけでしょうか?

*外部関数インターフェイスを使用したモジュールのバグと問題の割引

4

1 に答える 1

4

のドキュメントで説明されているように、gc.garbageリークが発生しないという保証はありません。具体的には、メソッドを持つ循環オブジェクトは__del__デフォルトでは収集されません。このようなオブジェクトの場合、さらにGCを有効にするには、循環リンクを手動で解除する必要があります。

CPythonソースコードを参照して理解したところによると、インタープリターはすべてのオブジェクトへの参照を制御下に置いています。「余分な」ガベージコレクターは、ヒープを介してマークアンドスイープのようなアルゴリズムを実行し、「外部」から到達可能かどうかをオブジェクトごとに記憶し、到達可能でない場合は削除します。(GCは世代別gcですが、引数を使用してモジュールから明示的に実行できgenerationます。)

あなたの基準を満たすと私が考えることができる唯一の効率的なアルゴリズムは、実際に参照カウントを強化する「完全な」GCアルゴリズムであり、これはPythonで実装されているようです。しかし、私はこれらの問題の専門家ではありません。

于 2010-09-26T11:58:21.727 に答える