循環参照
2012年7月6日 (金) 11:22時点におけるimported>Administratorによる版
循環参照(英:circular reference)とは、ある複数のデータ(データ構造)が相互に参照しあっている状態のことである。
2つのデータが相互に参照する相互参照のみならず、何個ものデータが巡り巡って循環しているということも多々ある。 また、1つのデータ構造が同一のデータ構造を参照する自己参照も循環参照のひとつである。
概要
プログラミングを行う際に循環参照を適切に処理できなければ、たとえばシリアライズを行うさいに永久ループに陥り、アウトオブメモリー(メモリ不足)やスタックマシンであればスタックオーバーフローが発生したりといったことになる。
また参照カウンター方式のガベージコレクターを採用するプログラミング言語や実行環境では、循環参照により参照しあうオブジェクトは半永久的に参照カウントが減らないという問題に遭遇し、UNIXのデーモンやWindowsサービス、常駐プログラムのような長時間起動し続けるプログラムにおいてメモリー不足やスタックオーバーフローが発生する。
循環参照の例
スプレッドシートでの循環参照
スプレッドシートの代名詞であるExcelで以下のような入力を行うと「循環参照に関する警告」というダイアログが表示され怒られる。
A | B | |
---|---|---|
1 | =A1 | =B2 |
2 | =B1 |
- セルA1は自己参照(=循環参照のひとつ)。
- セルB1はセルB2を参照し、セルB2はセルB1を参照しており、永久に参照を繰り返す。
C#での循環参照
C#とASP.NET MVC、Knockout.JSでウェブアプリを書いてるわけだが、循環参照するモデルクラス(オブジェクト)をJSON.NETで「簡単」にシリアライズする方法を模索中。いまのところ解決方法が思いつかない。
関連項目
参考文献