c语言 计算程序运行时间

c语言 计算程序运行时间,第1张

#include <stdio.h>

#include <time.h>

#define N 10000 /*这个数字可以自己改,如果时间太长结果不出来你就改小点*/

void f()

{

int i, j, k

for ( i = 0i <N++i )

for ( j = 0j <N++j )

for ( k = 0k <N++k )

}

int main()

{

clock_t begin, duration

begin = clock()

f()

duration = clock() - begin

printf( "函数f()的运行时间大约为:%dms\n", duration*1000/CLOCKS_PER_SEC )

}

在程序开始时调用一次time()结束时调用一次time(),两次相减就能获得秒数。

例:

#include

<time.h>

#include

<stdio.h>

int

main()

{

int

iStartTime

=

time(NULL)

int

i

=

1

int

iEndTime

while

(i

>

0)//这里应该放你要运行的程序

{

i++

}

iEndTime

=

time(NULL)

printf("%ds

elapsed.\n",iEndTime-iStartTime)

return

0

}

但这个方法精度很低,只能精确到秒。要更高的精确度需要调用 *** 作系统的API。如在Windows下,精确到毫秒级:

#include

<windows.h>

#include

<stdio.h>

int

main()

{

unsigned

uStartTime

=

GetTickCount()//该函数只有在Win2000及以上的版本才被支持

int

i

=

1

unsigned

uEndTime

while

(i

>

0)

{

i++

}

uEndTime

=

GetTickCount()

printf("%ums

elapsed.\n",uEndTime-uStartTime)

return

0

}

C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:

clock_t clock( void )

这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:

#ifndef _CLOCK_T_DEFINED 

typedef long clock_t 

#define _CLOCK_T_DEFINED 

#endif

很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

#define CLOCKS_PER_SEC ((clock_t)1000)   //CLOCKS_PER_SEC为系统自定义的

可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:

void elapsed_time() 

printf("Elapsed time:%u secs./n",clock()/CLOCKS_PER_SEC) 

}

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

#include “stdio.h” 

#include “stdlib.h” 

#include “time.h”

int main( ) 

{

long i = 10000000L

clock_t start, finish

double Total_time

/* 测量一个事件持续的时间*/

printf( "Time to do %ld empty loops is ", i )

start = clock()

while( i--)

finish = clock()

Total_time = (double)(finish-start) / CLOCKS_PER_SEC

printf( "%f seconds/n", Total_time)

return 0

}

在笔者的机器上,运行结果如下:

Time to do 10000000 empty loops is 0.03000 seconds

上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的。在标准C/C++中,最小的计时单位是一毫秒。

参考资料

c语言测试程序执行时间.csdn博客[引用时间2017-12-31]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7759814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存