PROFIL(2)

名称
profil - プロセスのプロファイルを制御する

ライブラリ
libc

書式
<unistd.h> int profil(char *samples, size_t size, vm_offset_t offset, int scale)

解説
profil() システムコールは、現在のプロセスのカウンタプロファイルを有効化または 無効化します。 プロファイルが有効な場合、プロファイルクロックチックごとに、カーネルは samples バッファ内の適切なカウントを更新します。 プロファイルクロックの周波数は、 プロファイル出力ファイル内のヘッダ内に記録されます。

バッファ samples には size バイトが含まれており、一連の 16 ビットの塊に分割されます。 各塊は、プロファイルが有効時にプロファイルクロックチックが発生したときに、 プログラムカウンタがプロセス内の特別なアドレス範囲内にあった回数を カウントします。 指定のプログラムカウンタアドレスについて、対応する塊の数が 次の関係によって与えられます。

    [(pc - offset) / 2] * scale / 65536

offset 引数は、カーネルがプログラムカウンタサンプルを 取る最も低いアドレスです。 scale 引数の範囲は 1 から 65536 であり、 塊の広がりを変更するのに使用できます。 スケール 65536 は、各塊をアドレス範囲の 2 バイトに割り当てます。 スケール 32768 は 4 バイト、16384 は 8 バイト、後は同様です。 中間の値はおおよそ中間の範囲を与えます。 scale 値が 0 の場合、プロファイルは無効になります。

戻り値

関連ファイル
/usr/lib/gcrt0.o
    プロファイリング用の C ランタイムスタートアップファイル
gmon.out
    プロファイル出力ファイルの従来の名前

エラー
次のエラーが報告される可能性があります:

[EFAULT]
    バッファ samples に無効なアドレスが入っています。

関連項目
gprof(1)

歴史
profil() 関数は AT&T UNIX で登場しました。

バグ
このルーチンの名前は profile() にすべきです。

samples 引数は本当はベクトル unsigned short のベクトルである必要があります。

gmon.out ファイルの形式は記述されていません。