计算机系统结构第一节课

gettimeofday()

  • 表头文件:#include

struct timeval
{
   long tv_sec; //秒
   long tv_usec;//微妙
}
struct timezone
{
   int tz_minuteswest;//和格林威治时间差了多少分钟
   int tz_dsttime;    //日光节约时间的状态
}
  • 它获得的时间精确到微秒(1e-6 s)量级。在一段代码前后分别使gettimeofday可以计算代码执行时间:

struct timeval tv_begin, tv_end;
gettimeofday(&tv_begin, NULL);
foo();
gettimeofday(&tv_end, NULL);

clock()

  • 表头文件:time.h
  • 函数原型:clock_t clock(void);
  • 函数说明:该程序从启动到函数调用占用CPU的时间
    • 这个函数返回从 -开启这个程序进程- to -程序中调用clock函数-时之间的CPU时间,称为挂钟时间(wal-clock)-CPU的大约时间。若挂钟时间不可取返回1,其中clock_t用来保存时间的数据类型。

当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:

 #include <stdio.h>
 #include <stdlib.h>//调用system.pause
 #include <time.h>
int main(void)
{
    long i = 10000000L;
    clock_t start, finish;
    double duration;
    /* 测量一个事件持续的时间*/
    printf( "Time to do %ld empty loops is ", i) ;
    start = clock();
    while( i-- );
    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    printf( "%f seconds\n", duration );
    system("pause");
}

输出:
Time to do 10 000 000 empty loops is 0.03000 seconds

CLOCKS_PER_SEC =1000 000um = 1s

Linux-time命令

[root@localhost ~]# time ./filename

anaconda-ks.cfg install.log install.log.syslog satools text

real 0m0.009s

user 0m0.002s

sys 0m0.007s

输出的信息分别显示了该命令所花费的real时间、user时间和sys时间。

  • real时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。

  • user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。

  • sys时间是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。

  • 当程序时间运行较长时,uesr总是比sys耗时更长

    1. Linux系统命令time给出的用户时间,系统时间,实际时间分别是什么含义?
      本次实验我们了解了Linux中的time的用法。其中:
      a. real时间是指挂钟时间,也就是命令开始执行到结束的时间,这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
      b. user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
      c. sys 时间是花费在内核模式中的CPU时间,代表在内核中执行系统调用所花费的时间,这也是真正由进程使用的CPU时间。

      扫描二维码关注公众号,回复: 2736616 查看本文章
    2. clock()和gettimeofday()函数获取的CPU时间和总时间是什么含义?
      a. clock()是指:运行程序进程到调用clock()的时间,是相对时间。
      b. gettimeofday()是指:格林威治时间到调用gettimeofday的()时间,是绝对时间。
      c. 他们都不能测精确的CPU时间,只能通过某种方式间接测出大概的CPU时间。

    3. 实验中各种方法获得的计时相关数值分别是什么精度,相互之间有什么关系?
      a. Clock的精度在Linux下是1微秒,在WIN下是1毫秒
      b. Gettimeofday精确到1微秒
      c. 命令time精确到秒的小数点后三位

另外,C++库函数中的clock()的用法:
- include time.h
- clock_t clock(void);
- 功能:函数返回自程序开始运行的处理器时间,如果无可用信息,返回-1。 转换返回值以秒记, 返回值除以CLOCKS_PER_SECOND=1 000 000

其次,GCC的命令:
第一种编译方法:
- gcc filename.c -o filename
- gcc编译文件(一步到位)
第二种编译方法另一种编译方式:

gcc -E hello.c -o hello.i //预编译过程
gcc -S hello.i -o hello.s //编译过程
gcc -c hello.s -o hello.o //汇编过程
gcc hello.c -o hello //链接过程
-o 是编译出的文件名字

猜你喜欢

转载自blog.csdn.net/qq_24653023/article/details/60469914
今日推荐