この記事では、C言語で処理の経過時間を計測する方法について解説します。
clock関数
、gettimeofday関数
、そしてマクロを使用する方法について詳しく説明します。
これにより、プログラムの処理時間を正確に計測し、結果を表示することができます。
初心者の方にも分かりやすく解説していきますので、ぜひ参考にしてください。
clock関数を使った計測方法
プログラムの処理時間を計測するために、C言語ではclock関数
を使用することができます。
この関数を使うことで、処理の開始時点と終了時点の時刻を取得し、その差分を計算することができます。
clock関数
は、<time.h>ヘッダーファイル
に定義されています。
この関数は、プログラムの実行時間をクロック単位で返します。
クロック単位は、プロセッサが1秒間に行うクロック数を表します。
以下に、clock関数
の使い方の例を示します。
#include <stdio.h>
#include <time.h>
int main() {
clock_t start, end;
double cpu_time_used;
start = clock(); // 処理の開始時刻を取得
// 処理の実行
end = clock(); // 処理の終了時刻を取得
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; // 処理時間を計算
printf("処理時間: %f秒\n", cpu_time_used);
return 0;
}
gettimeofday関数を使った計測方法
gettimeofday関数の概要と使い方
gettimeofday関数
は、UNIX系のシステムで使用される関数であり、現在の時刻をマイクロ秒単位で取得することができます。
UNIX系のシステム用であるため、Windows環境では使えません。
この関数を使用することで、処理の開始時刻と終了時刻の差を計算することができます。
gettimeofday関数
の使い方は以下の通りです。
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
この関数は、引数として2つの構造体ポインタを受け取ります。
struct timeval
は、秒とマイクロ秒を格納するための構造体であり、struct timezone
はタイムゾーン情報を格納するための構造体です。
処理の開始と終了時にgettimeofday関数を使用する方法
処理の開始時点でgettimeofday関数
を呼び出し、その結果を変数に保存します。
そして、処理の終了時点でもう一度gettimeofday関数
を呼び出し、その結果と開始時点の結果の差を計算します。
以下に、処理の開始と終了時にgettimeofday関数
を使用するサンプルコードを示します。
#include <stdio.h>
#include <sys/time.h>
int main() {
struct timeval start, end;
long seconds, microseconds;
// 処理の開始時刻を取得
gettimeofday(&start, NULL);
// 処理の実行
// ここに計測したい処理を記述する
// 処理の終了時刻を取得
gettimeofday(&end, NULL);
// 経過時間を計算
seconds = end.tv_sec - start.tv_sec;
microseconds = end.tv_usec - start.tv_usec;
// ミリ秒単位で経過時間を表示
printf("処理時間: %ld ミリ秒\n", (seconds * 1000) + (microseconds / 1000));
return 0;
}
上記のコードでは、処理の開始時刻をstart変数
に保存し、処理の終了時刻をend変数
に保存しています。
そして、end
からstart
を引いて経過時間を計算し、ミリ秒単位で表示しています。
マクロを使った計測方法
プログラムの処理時間を計測する方法の一つとして、マクロを使用する方法があります。
マクロを使うことで、処理の開始と終了時に簡単に時間を計測することができます。
マクロを使った計測方法の概要
マクロを使った計測方法では、処理の開始時に現在の時刻を取得し、終了時に再度時刻を取得してその差分を計算します。
この差分が処理時間となります。
以下に、マクロを使った計測方法の概要を示します。
#include <stdio.h>
#include <time.h>
#define START_TIMER clock_t start_time = clock()
#define STOP_TIMER clock_t end_time = clock()
#define GET_ELAPSED_TIME ((double)(end_time - start_time) / CLOCKS_PER_SEC)
int main() {
START_TIMER;
// 処理の開始
STOP_TIMER;
double elapsed_time = GET_ELAPSED_TIME;
printf("処理時間: %f秒\n", elapsed_time);
return 0;
}
やってることはclock関数を使った方法と同じですが、マクロを使用することで、簡単に処理時間を計測することができます。