zoukankan      html  css  js  c++  java
  • __c语言__测一段代码的运行时间

    2017-09-16 13: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
    ",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("
    %s
    " , asctime(timeInfo));
        /************************************************************/
        double usedTime;
        double clockSec = (double)CLOCKS_PER_SEC;
        printf("CLOCKS_PER_SEC : %.4f ticks per second
    " , clockSec);
        
        clock_t start , finish;
        start = clock();
        printf("
        Start : %.4f ticks 
    " , (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 
    
    " , (double)finish);
        /************************************/
        usedTime = (double)(finish-start);
        usedTime = usedTime/clockSec;
        printf("usedTime : %.4f s 
    
    " , usedTime);
        
        return 0;
    }
    --------小尾巴 ________一个人欣赏-最后一朵颜色的消逝-忠诚于我的是·一颗叫做野的心.决不受人奴役.怒火中生的那一刻·终将结束...
  • 相关阅读:
    Linux文件目录结构一览表
    Linux一切皆文件(包含好处和弊端)
    Linux使用注意事项(新手必看)
    为什么建议使用虚拟机来安装Linux?
    开发中出现的问题
    为什么很多公司都在招测试开发?
    Linux cat查看文件,查找关键字(grep),统计(wc -l)
    性能测试
    Linux的感性理解
    使用Python循环插入10万数据
  • 原文地址:https://www.cnblogs.com/tianxiaxuange/p/7531108.html
Copyright © 2011-2022 走看看