Solaris 動的トレースガイド

DTrace オブジェクトのポインタ

D コンパイラでは、連想配列、組み込み関数、変数などの DTrace オブジェクトへのポインタを、& 演算子を使って取得することは禁じられています。DTrace 実行環境では、プログラムに必要なメモリーをより効果的に管理するため、次のプローブが起動するまでの間に、必要に応じて変数のアドレスが再配置されます。このため、これらの変数のアドレスを取得することは禁じられています。複合構造を作成すれば、DTrace オブジェクト記憶域のカーネルアドレスを取得する式を作成することは可能です。このような式を D プログラム内で作成することはなるべく避けてください。こうした式を使用する必要がある場合は、プローブ起動時にアドレスをキャッシュしないようにしてください。

ANSI-C では、ポインタを使って、間接的な関数呼び出しや代入を実行できます。たとえば、代入演算子の左側に、単項の間接参照演算子 * を配置できます。D では、ポインタを使ったこのような式は許可されていません。値は、名前を指定するか、D スカラー配列または連想配列に配列インデックス演算子 [] を適用することにより、D 変数に直接代入しなければなりません。第 10 章アクションとサブルーチンに指定されているように、DTrace 環境に定義されている関数は名前を指定して呼び出す必要があります。D では、ポインタを使った間接的な関数呼び出しは許可されていません。