clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的,
一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。
clock函数:clock_t clock(); 这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间
的CPU时钟计时单元 (clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。
clock_t定义: #ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
#define CLOCKS_PER_SEC ((clock_t)1000):
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1
代码:
分析:L20:如果写成(double)((finish - start) / CLOCKS_PER_SEC)这种形式,一般情况下这个值会为0.0000
因为finish start CLOCKS_PER_SEC均为long型变(常)量,若finish-start < 1000,则
(finish - start) / CLOCKS_PER_SEC = 0,再将其强制转换为double型数据,得到0.0000。
如果写成(double)(finish - start) / CLOCKS_PER_SEC,先会将finish - start转换成double型
数据,然后执行"/"操作,则编译器自动将CLOCKS_PER_SEC提升为double型,故而是两个double数据相除
能得到正确结果。
L33:Q:为什么要加上while(i--);?
A:本机测试到每个时钟计时单元执行了322580次上述循环,如果不加这个循环,则在瞬间就会执行完
binsearch函数,这样得到的start,finish数值会是一样的,故而(finish - start) = 0,
这样会得到执行函数binsearch函数所花费的时间为0,显然这是不对的。