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 ファイルの形式は記述されていません。