参照 (計算機科学)
多くのデータ構造の中で、大きく複雑なオブジェクトは小さなオブジェクト群から構成されている。そのようなオブジェクト群の格納方法は以下のように2つに分けられる。
内部収納(internal storage)では、小さなオブジェクトの内容は大きなオブジェクトの内部に格納されている。
外部収納(external storage)では、小さなオブジェクトは独自の場所に置かれ、大きなオブジェクトはそれへの参照のみを格納する。
内部収納は、参照のための領域や動的メモリアロケーションのためのメタデータを必要とせず、デリファレンスや小さなオブジェクト用のメモリ確保に要する時間も節約でき、効率的である。内部収納は、同種の大きなオブジェクトをメモリ内に連続して配置することで「参照の局所性」を高める効果もある。しかし、外部収納が好まれる状況も以下のようにさまざま存在する。
データ構造が再帰的(つまり自身を内包する可能性がある)ならば、内部収納は不可能である。
大きなオブジェクトが限られた領域に格納されている場合(例えばスタック)、オーバーラン(オーバーフロー)を防ぐためにその内容の大部分を外部収納にして物理的なサイズを削減する必要があるかもしれない。
小さなオブジェクトのサイズが可変である場合、それを内部収納すると大きなオブジェクトを可変サイズとする必要が生じ、効率が悪くなることがある。
参照を使うことで仕様変更などに柔軟に対応できる。
一例としてJavaでは、プリミティブ型は内部収納であり、オブジェクト(クラス型)や配列は外部収納である。