3.5.5. アレイおよびアレイ要素の消去/削除
場合によっては、アレイ要素内の関連する値をクリアしたり、別のプローブで再利用するためにアレイ全体をリセットしたりする必要がある場合があります。「アレイ内での複数要素の処理」 の 例3.15「cumulative-vfsreads.stp」 では、プロセスごとの VFS 読み取り数が時間の経過とともにどのように増加するかを追跡できますが、各プロセスが 3 秒間に行う VFS 読み取り数は表示されません。
これを実行するには、アレイが累積した値を消去する必要があります。
delete
演算子を使用してアレイ内の要素またはアレイ全体を削除すると、これが実行できます。以下の例を見てみましょう。
例3.16 noncumulative-vfsreads.stp
global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { foreach (count in reads) printf("%s : %d \n", count, reads[count]) delete reads }
例3.16「noncumulative-vfsreads.stp」 では、2 つ目のプローブが 調査した 3 秒間のみで 各プロセスが実行した VFS reads 数を出力します。
delete reads
ステートメントは、プローブ内の reads
アレイを消去します。
注記
同一プローブ内には、複数のアレイ演算を設置することが可能です。「アレイ内での複数要素の処理」 および 「アレイおよびアレイ要素の消去/削除」 の例を使用すると、3 秒間でプロセスが実行した VFS reads の数を追跡し、かつ それらのプロセスでの累積 VFS reads 数を集計することができます。以下の例を考慮してください。
global reads, totalreads probe vfs.read { reads[execname()] ++ totalreads[execname()] ++ } probe timer.s(3) { printf("=======\n") foreach (count in reads-) printf("%s : %d \n", count, reads[count]) delete reads } probe end { printf("TOTALS\n") foreach (total in totalreads-) printf("%s : %d \n", total, totalreads[total]) }
この例では、
reads
と totalreads
のアレイが同じ情報を追跡し、同様の方式で出力します。唯一の違いは、reads
は 3 秒ごとに消去されるのに対して、totalreads
は増え続けるという点です。