【C言語】処理の経過時間をミリ秒単位で計測する方法

この記事では、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関数を使った方法と同じですが、マクロを使用することで、簡単に処理時間を計測することができます。

目次から探す