Cプログラムの実行時間を見つける
この投稿では、WindowsおよびLinux環境でCプログラムの実行時間を見つける方法について説明します。
Cプログラムの実行時間を見つけるために一般的に使用される4つの方法があります。
1.使用する clock()
関数
使用できます clock()
によって提供される機能 <time.h>
Cアプリケーション内のタスクによって消費されるCPU時間を計算するためのヘッダーファイル。を返します clock_t
タイプ。クロックティックの総数を格納します。
経過した合計秒数を計算するには、経過したクロックティックの合計数をで割る必要があります。 CLOCKS_PER_SEC
マクロ( <time.h>
)以下に示すように:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <stdio.h> #include <time.h> // for clock_t, clock(), CLOCKS_PER_SEC #include <unistd.h> // for sleep() //Cプログラムの実行時間を検索するメイン関数 int main() { //コードの実行時間を保存します double time_spent = 0.0; clock_t begin = clock(); //ここでいくつかのことをします sleep(3); clock_t end = clock(); //差を見つけて経過時間を計算し(end-begin)、 //差をCLOCKS_PER_SECで割って、秒に変換します time_spent += (double)(end - begin) / CLOCKS_PER_SEC; printf("The elapsed time is %f seconds", time_spent); return 0; } |
出力(異なる場合があります):
The elapsed time is 0.000014 seconds
注意してください clock()
関数は実際の経過時間を返しませんが、基盤となるオペレーティングシステムがプロセスを実行するのにかかった時間を返します。言い換えれば、実際の壁掛け時計の時間は実際にははるかに長い可能性があります。
2.使用する time()
関数
The <time.h>
ヘッダーも提供します time()
エポック(1970年1月1日00:00:00 UTC)から経過した合計秒数を返す関数。それはへのポインタを取ります time_t
引数として、通常は次のように渡されます NULL
とを返します time_t
タイプ。引数がそうでない場合 NULL
の場合、戻り値も引数が指すメモリに格納されます。
その使用法はに似ています clock()
以下に示すように、関数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <stdio.h> #include <time.h> // for time() #include <unistd.h> // for sleep() //Cプログラムの実行時間を検索するメイン関数 int main() { time_t begin = time(NULL); //ここでいくつかのことをします sleep(3); time_t end = time(NULL); //差を見つけて経過時間を計算します (end - begin) printf("The elapsed time is %d seconds", (end - begin)); return 0; } |
出力:
The elapsed time is 3 seconds
3.使用する gettimeofday()
関数
The gettimeofday()
関数は、エポックから経過した壁掛け時計の時間を返し、それを timeval
構造。秒とマイクロ秒で表されます。
それはで定義されています <sys/time.h>
ヘッダーファイルであり、2つの引数を取ります–最初の引数は timeval
構造体であり、2番目の引数はnullポインタです。 The timeval
構造は次のように宣言されます <time.h>
ヘッダ:
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
次のコードは、その使用法を示しています。 gettimeofday()
壁掛け時計の時間を測定することによって:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <stdio.h> #include <sys/time.h> // for gettimeofday() #include <unistd.h> // for sleep() //Cプログラムの実行時間を検索するメイン関数 int main() { struct timeval start, end; gettimeofday(&start, NULL); //ここでいくつかのことをします sleep(5); gettimeofday(&end, NULL); long seconds = (end.tv_sec - start.tv_sec); long micros = ((seconds * 1000000) + end.tv_usec) - (start.tv_usec); printf("The elapsed time is %d seconds and %d micros\n", seconds, micros); return 0; } |
出力(異なる場合があります):
The elapsed time is 5 seconds and 5000147 micros
この関数はGCCコンパイラでサポートされており、Windowsでは機能しない可能性があります。
4.使用する clock_gettime()
関数
使用することもできます clock_gettime()
で定義された関数 <time.h>
最大ナノ秒の精度をサポートするヘッダーファイル。 2つの引数を取ります。最初の引数はクロックタイプで、2番目の引数は timespec
構造。 The timespec
構造はによって提供されます <time.h>
ヘッダーであり、次のように宣言されます。
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
次のコードは、システム全体のリアルタイムクロックを使用して経過時間を計算します。 CLOCK_REALTIME
、その時間はエポックからの秒とナノ秒を表します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <stdio.h> #include <time.h> // for clock_t, clock() #include <unistd.h> // for sleep() #define BILLION 1000000000.0 //Cプログラムの実行時間を検索するメイン関数 int main() { struct timespec start, end; clock_gettime(CLOCK_REALTIME, &start); //ここでいくつかのことをします sleep(3); clock_gettime(CLOCK_REALTIME, &end); // time_spent=end-開始 double time_spent = (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) / BILLION; printf("The elapsed time is %f seconds", time_spent); return 0; } |
注意してください clock_gettime()
関数はごく少数のUNIXマシンでのみ機能します。
これで、Cプログラムの実行時間を見つけることができます。
関連記事: