参照カウントとは?
さんしょうかうんと
参照カウントとは、あるオブジェクトが何箇所から参照されているかを数え、ゼロになった時点でメモリを解放するガベージコレクションの手法です。
参照カウント(reference counting)とは、プログラムのメモリ管理において、オブジェクト(データ)が何個のポインタや変数から参照されているかを数値で追跡し、その数がゼロになったときに自動的にメモリを解放する仕組みです。
オブジェクトが生成されると参照カウントは1となり、新たな変数に代入されたり関数に渡されるたびにカウントが増加します。逆に変数がスコープを抜けたり明示的に解放されるとカウントが減少し、0になった時点でそのオブジェクトのメモリが即座に回収されます。
参照カウントの利点は次の通りです。
- オブジェクトが不要になった瞬間にメモリが解放される(即時回収)
- ガベージコレクションのための「停止(stop-the-world)」が不要
- 実装が比較的シンプルで予測可能
一方、代表的な欠点として循環参照(A→B→Aのような相互参照)があります。この場合、互いに参照し合っているため、どちらのカウントも0にならず、メモリリークが発生します。この問題に対処するため、Pythonでは別途サイクル検出GCを併用し、RustのRc/Arcでは循環参照を意図的に避けるかWeak参照を使う設計が推奨されています。
参照カウントはPython・Swift・Rustなど多くの言語で採用されており、スマートポインタの基盤技術としても広く活用されています。
使い方・例文
Pythonでは「オブジェクトの参照カウントがゼロになると、メモリが自動的に解放される」という形で説明されます。Rustでは「Rc::cloneを呼ぶと参照カウントが増加し、全てのRcがドロップされると値が解放される」のように使われます。
この用語をシェア
最終更新: