测一段代码的运行时间

Posted 我即狂澜,且力不可挽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测一段代码的运行时间相关的知识,希望对你有一定的参考价值。

2017-09-1613:35:56

感觉很实用。

/**************************************
time ./a.out 命令所花费的real时间、user时间和sys时间。 
    real时间是指挂钟时间,也就是命令开始执行到结束的时间。
        这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。 
    
    user时间是指进程花费在用户模式中的CPU时间,
        这是唯一真正用于执行进程所花费的时间,
        其他进程和花费阻塞状态中的时间没有计算在内。 
    
    sys时间是指花费在内核模式中的CPU时间,
        代表在内核中执系统调用所花费的时间,
        这也是真正由进程使用的CPU时间。
**************************************/

/**************************************
得到进程花费在用户模式中CPU执行时间.
    其他进程和花费阻塞状态中的时间没有计算在内。
#include <time.h>
clock_t clock(void);
    clock函数返回的是cpu时间,并不是秒数,
    真正的一秒钟可能包含若干个CPU时间,
    这个值通常是由宏CLOCKS_PER_SEC来定义,
    表示一秒中有CLOCKS_PER_SEC这么多个cpu时间,
    不同的编译器可能不同
**************************************/

/**************************************
得到命令开始执行到结束的时间。
        这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv, const struct timezone *tz);
**************************************/
#include <stdio.h>
#include <sys/time.h>
int main(int argc , char *argv[])
{
    long i,j,k,r;
    long n = 800;
    
    long a[800][800]={0};
    long b[800][800]={0};
    long c[800][800]={0};
    
    for(i = 0 ; i < n ; i++)
    {
        for(j = 0 ; j < n ; j++)
        {
            a[i][j] = i*j-i-j;
            b[i][j] = i*j+i+j;
        }
    }
    /************************************/
//定义两个结构体,来记录开始和结束时间
    struct  timeval start;
    struct  timeval end;
//记录两个时间差
    double usedTime;

//第一次获取时间,即表示开始记时
    gettimeofday(&start,NULL);
    for(k = 0 ; k < n ; k++)
    {
        for(j = 0 ; j < n ; j++)
        {
            r = a[j][k];
            for(i = 0 ; i < n ; i++)
            {
                c[j][i] += r * b[k][i];
            }
        }
    }
//第二次获取时间,即表示结束记时
    gettimeofday(&end,NULL);
    /************************************/
//计算时间差,并打印
    usedTime = (double)(end.tv_sec-start.tv_sec)+ ((double)(end.tv_usec-start.tv_usec))/1000000;
    printf("usedTime : %.4f s\n",usedTime);
    
    return 0;
}

 ----------------------------------------------------------

#include <stdio.h>
#include <time.h>
int main(int argc , char *argv[])
{
    long i,j,k,r;
    long n = 800;
    
    long a[800][800]={0};
    long b[800][800]={0};
    long c[800][800]={0};
    
    for(i = 0 ; i < n ; i++)
    {
        for(j = 0 ; j < n ; j++)
        {
            a[i][j] = i*j-i-j;
            b[i][j] = i*j+i+j;
        }
    }
    /******************得到本机时间年月日时分秒******************/
    time_t rawTime;
    struct tm *timeInfo;
    time(&rawTime);
    timeInfo = localtime(&rawTime);
    printf("\n%s\n" , asctime(timeInfo));
    /************************************************************/
    double usedTime;
    double clockSec = (double)CLOCKS_PER_SEC;
    printf("CLOCKS_PER_SEC : %.4f ticks per second\n" , clockSec);
    
    clock_t start , finish;
    start = clock();
    printf("\n    Start : %.4f ticks \n" , (double)start);
    for(k = 0 ; k < n ; k++)
    {
        for(j = 0 ; j < n ; j++)
        {
            r = a[j][k];
            for(i = 0 ; i < n ; i++)
            {
                c[j][i] += r * b[k][i];
                
            }
        }
    }
    finish = clock();
    printf("    Over : %.4f ticks \n\n" , (double)finish);
    /************************************/
    usedTime = (double)(finish-start);
    usedTime = usedTime/clockSec;
    printf("usedTime : %.4f s \n\n" , usedTime);
    
    return 0;
}

 

以上是关于测一段代码的运行时间的主要内容,如果未能解决你的问题,请参考以下文章

爆测一周,22年必看最细致代码托管工具测评

爆测一周!22年必看最细致代码托管工具测评

运行/调试你的PHP代码

如何在kotlin的片段内显示网格视图?

Codeigniter 助手重复 HTML 代码片段

简单的方法来分享/讨论/协作的代码片段?