「循環参照」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator 細 (→スプレッドシートでの循環参照) |
imported>Fallout New Tokyo |
||
(他の1人の利用者による、間の1版が非表示) | |||
1行目: | 1行目: | ||
− | + | '''循環参照'''([[英語]]:circular reference)とは、ある複数の[[データ]]([[データ構造]])が相互に[[参照]]しあっている状態のことである。 | |
− | 2つの[[データ]] | + | == 概要 == |
− | + | 2つの[[データ]]が相互に参照する[[相互参照]]のみならず、何個ものデータが巡り巡って循環しているということも多々ある。 | |
− | + | また、1つの[[データ構造]]が同一のデータ構造を参照する[[自己参照]]も循環参照のひとつである。 | |
− | |||
[[プログラミング]]を行う際に循環参照を適切に処理できなければ、たとえば[[シリアライズ]]を行うさいに[[永久ループ]]に陥り、[[アウトオブメモリー]](メモリ不足)や[[スタックマシン]]であれば[[スタックオーバーフロー]]が発生したりといったことになる。 | [[プログラミング]]を行う際に循環参照を適切に処理できなければ、たとえば[[シリアライズ]]を行うさいに[[永久ループ]]に陥り、[[アウトオブメモリー]](メモリ不足)や[[スタックマシン]]であれば[[スタックオーバーフロー]]が発生したりといったことになる。 | ||
41行目: | 40行目: | ||
== 参考文献 == | == 参考文献 == | ||
− | + | {{reflist}} | |
− | |||
− | |||
{{stub}} | {{stub}} |
2014年2月26日 (水) 00:59時点における最新版
循環参照(英語: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で「簡単」にシリアライズする方法を模索中。いまのところ解決方法が思いつかない。