c语言程序统计时间,C语言计算代码执行时间的办法

C语言计算代码执行时间的办法

在调试分析性能的时候,我们经常需要检查一段代码执行花了多少时间;下面的例子说明在C语言里面如何计算代码的执行时间。

有两个和计算执行时间相关的函数。

clock()

返回程序到目前的CPU执行时间,这个值需要除以CLOCKS_PER_SEC才能得到真正的用户时间,即秒。

gettimeofday()

得到当前的时间精确到微秒。

注意两种的区别,clock()得到的是CPU时间,如果一段代码大部分时间是在sleep或者等待I/O,那么他的CPU时间是非常短的,后面的例子我们看到一个sleep(10)函数执行得到的CPU时间几乎为零,但是通过gettimeofday()得到真实的时间。

看一个例子:

#include

#include

#include

#include

void work_sleep() {

sleep(2);

}

void work_calc()

{

int i,j;

double v;

for (i = 0; i < 5000; i++) {

for (j = 0; j < 5000; j++) {

v = pow(1.1 + i + j, 2.2 + i + j);

}

}

}

int main(int argc, char * argv[]) {

clock_t clockstart, clockend;

struct timeval start, end;

int timeuse;

// sleep

clockstart = clock();

gettimeofday(&start, NULL);

work_sleep();

clockend = clock();

gettimeofday(&end, NULL);

timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;

printf("sleep clock time=%.3fs, timeofday=%.3fs\n", (double)(clockend-clockstart)/CLOCKS_PER_SEC, (double)timeuse/1000000);

// calc

clockstart = clock();

gettimeofday(&start, NULL);

work_calc();

clockend = clock();

gettimeofday(&end, NULL);

timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;

printf("calc clock time=%.3fs, timeofday=%.3fs\n", (double)(clockend-clockstart)/CLOCKS_PER_SEC, (double)timeuse/1000000);

}

定义了两个函数,一个work_sleep()不干活,只sleep 2秒;另一个work_calc包含大量的浮点运算操作;我们看执行结果:

$ gcc test.c -lm

$ time ./a.out

sleep clock time=0.000s, timeofday=2.000s

calc clock time=1.140s, timeofday=1.388s

real 0m3.392s

user 0m1.147s

sys 0m0.003s

我们可以看到:

sleep的clock()时间几乎为0,因为他不占用CPU执行时间。

timeofday计算的是函数开始到截至的时间差,不管函数干了什么内容。

real的值差不多等于两个timeofday的和。

user的值差不多等于两个clock的和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值