プログラムのパフォーマンス (実行速度) や性能上のボトルネックを評価するためには,プログラムの特定部分の処理時間を計測する必要がある.また,プログラム内で処理時間を要している箇所を探すことにより,アルゴリズムやデータ構造の変更などのパフォーマンス・チューニングを行うことができる.
測定する時間には,
があり,それぞれ測定方法が異なる.
プログラムの処理時間を計測する方法 (時間計測関数,コマンド) の代表的なものを挙げる.
#include <time.h> clock_t clock(void);
#include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz);
struct timeval { time_t tv_sec; /* 秒 */ suseconds_t tv_usec; /* マイクロ秒 */ };gettineofday 関数を用いればマイクロ秒の精度まで計測が可能となる. gettineofday 関数は time関数 (秒単位計測) 同様に実時間計測を行う.
#include <sys/time.h> #include <sys/resource.h> int getrusage(int who, struct rusage *usage);
struct rusage { struct timeval ru_utime; /* 使用されたユーザ CPU 時間 */ struct timeval ru_stime; /* 使用されたシステム CPU 時間 */ ・・・ /* CPU 時間に関するもののみ.以下,省略 */ };getrusage 関数を用いれば gettimeofday 関数と同じようにマイクロ秒の精度で,プロセス占有時間とシステム時間の 2 つを得ることができる.
#include <windows.h> BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
time [option] command [arguments...]