Cプログラム計時方法まとめ


方法1:clock()関数の使用
   
ヘッダファイル:time.h
   
関数プロトタイプ:clock_t clock(void)
    
説明:
 
ここで、clock関数は、このプログラムの開始から呼び出されたclock()関数までのCPUクロックタイミングユニット数を返す.
    
戻り値タイプはclock_t.そのうちCLOCKS_PER_SECは、1秒に何個のクロックタイミングユニットがあるかを示す定数です.
   
正確な値:ミリ秒まで正確で、一般的な場合に適しています.
   
例:
 #include
 int main(){
     clock_t start, end; 
     start = clock();
     /*...       ...*/
     end = clock();
     printf("time=%f
", (double)(end - start) / CLOCKS_PER_SEC);     return 0; }

方法2:time()とdifftime()関数の使用
   
ヘッダファイル:time.h
   
関数プロトタイプ:time_t time(time_t, * timer)
                      double difftime(time_t, time_t)
   
機能:1970年1月1日00:00:00から現在までの秒数を返します.
   
説明:
ここでdifftime(t 2−t 1)は、t 2−t 1よりも正確である.diffimeは機械によって変換されます
   
精度:秒単位
 
例:
#include
int main(){
    time_t start,end;
    start = time(NULL);
    /*...       ...*/
    end = time(NULL);
    printf("time = %d 
", difftime(end, start));     return 0; }

方法3:gettimeofday()関数
   
ヘッダファイル:sys/time.h
   
関数プロトタイプ:int gettimeofday(struct timeval*tv,struct timezone*tz)
   
説明:1.この関数はlinuxシステムの専属関数で、マイクロ秒まで正確にすることができます.
                2.ここで、パラメータtvは取得時間を保存する結果タイプであり、パラメータtzはタイムゾーン結果を保存するために使用される(使用しなければNULLに転送できる).
   
精度:マイクロ秒まで
 
例:
#include
int mian(){
    struct timeval start,end;
    gettimeofday(&start, NULL);
     /*...       ...*/
    gettimeofday(&end, NULL);
    long timeuse = 1000000*(end.tv_sec - start.tv_sec) + end.tv_usec-start.tv_usec;
    printf("time =%f  
", timeuse/1000000)     return 0; }
まとめ:linuxでは3つ目の方法が好ましく、他のシステムでは1つ目の方法が望ましい.第2の方法で統計した時間は秒まで正確である.実行時間が長いか、明らかな時間差があるプログラムを対象としています.第2の方法は移植性が良く,性能が安定しているが,精度が低く秒までしか正確ではない.
もちろん他にもいろいろな方法があります.詳細についてはリンクを参照してくださいhttps://blog.csdn.net/fz_ywj/article/details/8109368.この文章を書いた後、このブログが詳しくまとめられていることに気づいた.