Solaris 動的トレースガイド

スカラー変数

スカラー変数では、整数やポインタなど、個々の固定サイズのデータオブジェクトを表現できます。スカラー変数では、1 つ以上のプリミティブ型や複合型で構成された固定サイズのオブジェクトも表現できます。D では、オブジェクトの配列と複合構造体の両方を作成できます。DTrace では、事前定義された最大長まで文字列を伸ばすことによって、これを固定サイズのスカラーとして表現することもできます。D プログラム内の文字列の長さの制御については、第 6 章文字列で詳しく説明します。

スカラー変数は、D プログラム内の未定義の識別子に初めて値を割り当てたときに、自動的に作成されます。たとえば、int 型のスカラー変数 x は、任意のプローブ節内で int 型の値を割り当てるだけで作成できます。

BEGIN
{
	x = 123;
}

このようにして作成されたスカラー変数は、「大域的な」変数です。 この変数の名前とデータ格納場所は、1 度定義されると、D プログラムのすべての節で認識されます。識別子 x を参照するたびに、この変数に関連付けられた単一の格納場所が参照されます。

D では、ANSI-C の場合とは違って、明示的変数宣言は必要ありません。大域変数を使用する前に、その名前と型を明示的に割り当てて、大域変数を宣言したい場合は、次の例のように、プログラム内のプローブ節の外側に宣言を挿入します。ほとんどの D プログラムは明示的変数宣言を必要としませんが、明示的変数宣言が便利な場合もあります。たとえば、変数の型を細かく制御したい場合や、プログラムの冒頭に一連の宣言とコメントを挿入して、プログラム内で使用する変数やその意味を記述したい場合などです。

int x; /* declare an integer x for later use */

BEGIN
{
	x = 123;
	...
}

D の変数宣言では、ANSI-C 宣言の場合とは違って、初期値の割り当てを行いません。初期値の割り当てには必ず、BEGIN プローブ節を使用します。すべての大域変数の記憶域には、最初にこの変数を参照する前に、DTrace によってゼロが格納されます。

D 言語定義では、D 変数のサイズと数は制限されていません。ただし、DTrace 実装とシステムの使用可能なメモリー容量による制限が存在します。こうした制限のうちプログラムのコンパイル時に適用可能なものは、D コンパイラによって適用されます。プログラムの制限関連のオプションの設定方法については、第 16 章オプションとチューニング可能パラメータで詳しく説明します。