「循環参照」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「循環参照(英:circular reference)とは、ある複数のデータが相互に参照しあっている状態のことである。 2つのデータ...」)
 
imported>Administrator
6行目: 6行目:
  
 
== 概要 ==
 
== 概要 ==
[[プログラミング]]において循環参照を適切に処理できなければ、たとえば[[シリアライズ]]を行うさいに[[永久ループ]]に陥り、[[アウトオブメモリー]](メモリ不足)や[[スタックマシン]]であれば[[スタックオーバーフロー]]が発生したりといったことになる。
+
[[プログラミング]]を行う際に循環参照を適切に処理できなければ、たとえば[[シリアライズ]]を行うさいに[[永久ループ]]に陥り、[[アウトオブメモリー]](メモリ不足)や[[スタックマシン]]であれば[[スタックオーバーフロー]]が発生したりといったことになる。
  
 
また[[参照カウンター]]方式の[[ガベージコレクター]]を採用する[[プログラミング言語]]や[[実行環境]]では、循環参照により[[参照]]しあう[[オブジェクト]]は半永久的に参照カウントが減らないという問題に遭遇し、[[UNIX]]の[[デーモン]]や[[Windowsサービス]]、[[常駐プログラム]]のような長時間起動し続ける[[プログラム]]においてメモリー不足や[[スタックオーバーフロー]]が発生する。
 
また[[参照カウンター]]方式の[[ガベージコレクター]]を採用する[[プログラミング言語]]や[[実行環境]]では、循環参照により[[参照]]しあう[[オブジェクト]]は半永久的に参照カウントが減らないという問題に遭遇し、[[UNIX]]の[[デーモン]]や[[Windowsサービス]]、[[常駐プログラム]]のような長時間起動し続ける[[プログラム]]においてメモリー不足や[[スタックオーバーフロー]]が発生する。

2012年6月27日 (水) 06:11時点における版

循環参照(英:circular reference)とは、ある複数のデータが相互に参照しあっている状態のことである。

2つのデータが相互に参照するのみならず、何個ものデータが巡り巡って循環しているということも多々ある。

また、自己参照も循環参照のひとつである。

概要

プログラミングを行う際に循環参照を適切に処理できなければ、たとえばシリアライズを行うさいに永久ループに陥り、アウトオブメモリー(メモリ不足)やスタックマシンであればスタックオーバーフローが発生したりといったことになる。

また参照カウンター方式のガベージコレクターを採用するプログラミング言語実行環境では、循環参照により参照しあうオブジェクトは半永久的に参照カウントが減らないという問題に遭遇し、UNIXデーモンWindowsサービス常駐プログラムのような長時間起動し続けるプログラムにおいてメモリー不足やスタックオーバーフローが発生する。

循環参照の例

スプレッドシートでの循環参照

スプレッドシートの代名詞であるExcelで以下のような入力を行うと「循環参照に関する警告」というダイアログが表示され怒られる。

A B
1 =A1 =B2
2 =B1
  • セルA1は自己参照(=循環参照のひとつ)。
  • セルB1はセルB2を参照し、セルB2はセルB1を参照しており、永久に参照を繰り返す。

C#での循環参照

C#ASP.NET MVCKnockout.JSウェブアプリを書いてるわけだが、循環参照するモデルクラス(オブジェクト)をJSON.NETで「簡単」にシリアライズする方法を模索中。いまのところ解決方法が思いつかない。

関連項目

参考文献


外部リンク