[C#] 配列

arrayはSystem.Arrayクラスのオブジェクトなので、arrayを宣言するとheapに領域が確保される。
1. struct の配列の場合

int[] A;
A = new int[100];

intはSystem.Int32のstructなので、4バイト(と少しのオーバーヘッド)が100個heap上に取られる。個々のstructの中身はzeroに初期化される。
2. classの配列の場合。

string[] strs = new string[10];

stringはclassなので、heap上に取られるのは10個のreference。heap上ではゼロに初期化された値を持つため、referenceはnullになっている。つまり、何も指していない状態。
ここにさらに

strs[5] = "sample string";

のように、heap上に確保されたstringを代入することで実体を参照するようにできる。
チャールズ・ペツォルドは、少数のフィールドを持つデータ構造の配列を作る場合には、効率を考えるとstructの配列を使うべきだろう、と書いている。

広告
%d人のブロガーが「いいね」をつけました。