【技巧】clock()函数记录程序运行时间(算法效率比较)


    相关

  • 头文件
    time.h
  • 函数
    clock_t __cdecl1 clock(void)
    返回处理器调用某个进程或函数所经过的硬件滴答数(clock_t)。
  • 常量
    CLK_TCK2(Clock tick硬件(时钟)滴答)
  • 数据类型
    typedef long clock_t

    实现


思路

///
  clock ( ) 的返回值为:自程序开始运行至此函数被调用时所经过的硬件滴答数。
  分别取代码前后的clock tick数并作差,即为代码运行所经历的clock tick,再通过常量CLK_TCK便可得到代码运行时间。


应用

算法效率比较
以一个简单的交换数据为例:

#include <stdio.h>
#include <time.h>
int main(){
	clock_ start;
	int a,b,i;
	
	start = clock();//开始时间
	
	for (i = 0; i < 1000000; i++){//程序运行一次的时间很可能小于一个硬件滴答的时间,所以要循环多次。
	//————————————————————算法区域——————————————————————
		a = a + b;
		b = a - b;
		a = a - b;
	//————————————————————算法区域——————————————————————
	}
	
	printf("%lf\n",(double)(clock() - start) / CLK_TCK);//结束时间 - 开始时间
	return 0;
}

我们还可以通过以下方法输出其运行一次所用时间:

	printf("%e\n",(double)(clock() - start) / CLK_TCK / 1000000);

  1. __cdecl: __cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 ↩︎

  2. CLK_TCK: 每秒硬件滴答的数量,在不同编译环境下,此常量值有可能不同。(VC++6.0下为1000) ↩︎

posted @ 2019-11-20 13:30  高厉害  阅读(417)  评论(0编辑  收藏  举报