Tcl がガベージ コレクションに参照カウントを使用することについて、いくつかのテキストで言及されているのを見たことがあります。私が知る限り、Tclにはポインターや参照がないため、すべての変数は一度しか参照されないため、これが何を意味するのか疑問に思っていました。では、正確には何を数えているのでしょうか。
1 に答える
4
アイデアは、Tcl には変数ではなく値の参照カウントがあるということです。
copy-on-write セマンティクスに関する wiki ページを引用しましょう:
各値 (Tcl_Obj) には参照カウントがあります。値がコマンドに渡されるか、変数に割り当てられるたびに、参照カウントがインクリメントされ、コピーは作成されません。値が変更される場合、実装は最初に参照カウントをチェックします。カウントが 1 の場合、値への他の参照はなく、その場で変更できます。カウントが 1 より大きい場合、この値への他の参照があります。値をその場で変更すると、それらの参照も変更されます。これを防ぐために、値のコピーが作成され (新しい参照カウントは 1)、そのコピーがその場で変更されます。
この説明で唯一欠けているのは、値の参照カウントが 1 を下回ると値が破棄されるということです。
Tcl_Obj
詳細な情報については、マニュアルページの「オブジェクトのストレージ管理」セクションとこれらの 議論を読んでください。
于 2012-07-16T08:15:38.700 に答える