zoukankan      html  css  js  c++  java
  • 程序运行时间测试

    https://github.com/yaowenxu/Workplace/blob/master/timer/getrusagetimer.c

    关键结构体:

    struct rusage {
                 struct timeval ru_utime; /* user time used */
                 struct timeval ru_stime; /* system time used */
                 long ru_maxrss;          /* max resident set size */
                 long ru_ixrss;           /* integral shared text memory size */
                 long ru_idrss;           /* integral unshared data size */
                 long ru_isrss;           /* integral unshared stack size */
                 long ru_minflt;          /* page reclaims */
                 long ru_majflt;          /* page faults */
                 long ru_nswap;           /* swaps */
                 long ru_inblock;         /* block input operations */
                 long ru_oublock;         /* block output operations */
                 long ru_msgsnd;          /* messages sent */
                 long ru_msgrcv;          /* messages received */
                 long ru_nsignals;        /* signals received */
                 long ru_nvcsw;           /* voluntary context switches */
                 long ru_nivcsw;          /* involuntary context switches */
         };

    程序:

    /**
     * Author: Yaowen Xu
     * Github: https://github.com/yaowenxu
     * Organization: 北航系统结构研究所
     * Date: 2019-08-18 13:31:34
     * LastEditTime: 2019-08-18 13:51:26
     * Description: 使用系统 函数 getrusage 获取程序运行相关信息 
     *              此程序主要是关注与总时间和内核空间运行时间与用户
     *              空间运行时间,使用此函数可大致对程序运行时间计算;
     * 查看: 具体使用信息可以在控制台以 man getrusage 命令查看
     */
    #include <stdio.h>
    #include <math.h>
    #include <sys/time.h>
    #include <sys/resource.h>
    
    int str2int(char* str){
        char *p = str;
        int sum = 0;
        while (*p != '')
        {
            sum = sum*10 + (*p-'0');
            p++;
        }
        return sum;
    }
    
    int main(int argc, char* argv[]){
        int def = 1000;
        if (argc == 2)
        {
            def = str2int(argv[argc-1]);
        }
        for (int i = 0; i < def ; i++)
        {
            float tmp = sqrt(i);
        }
        struct rusage usage;
        getrusage(RUSAGE_SELF, &usage);
        //getrusage(RUSAGE_CHILDREN, &usage);
        long user =  usage.ru_utime.tv_sec * 1000000 + usage.ru_utime.tv_usec; // user time used
        long sys = usage.ru_stime.tv_sec * 1e6 + usage.ru_stime.tv_usec; // sys time used
        
        printf("User: %ld us
    ", user); //  用户空间使用的时间
        printf("Sys: %ld us
    ", sys); //  内核空间使用的时间
        printf("Total: %ld us
    ", user+sys); // 总共使用的时钟
        return 0;
    }

    保持更新,如果对您有帮助请点击推荐!更多关于Linux 相关的知识,请关注 cnblogs.com/xuyaowen 

  • 相关阅读:
    autoreleasepool
    #ifndef/#define/#endif
    类工厂创建单例
    第一篇献给你:Block的回调
    博客纪念日
    [系列教程] Discuz模板的制作方法
    使用Discuz!后台备份和恢复Discuz!站点数据库的方法教程
    discuz x2.5 还原教程
    80后公务员辞职自述:7年收入没涨 能力是听话
    公务员队伍开始动荡了吗?
  • 原文地址:https://www.cnblogs.com/xuyaowen/p/c-sys-getrusage.html
Copyright © 2011-2022 走看看