如何准确性测试一个函数的运行时间
一般的处理都是先调用计时函数,记下当前时间tstart,然后处理一段程序,再调用计时函数,记下处理后的时间tend,再tend和tstart做差,就可以得到程序的执行时间。
主要的几种方法:
1、time()获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。
void test1()
{
time_t start,stop;
start = time(NULL);
foo(); //dosomething
stop = time(NULL);
printf("Use Time:%ld\n",(stop-start));}
2、clock()函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元。
void test2()
{
double dur;
clock_t start,end;
start = clock();
foo(); //dosomething
end = clock();
dur = (double)(end - start);
printf("Use Time:%f\n",(dur/CLOCKS_PER_SEC));
}
3、timeGetTime()函数以毫秒计的系统时间。该时间为从系统开启算起所经过的时间,是windows api。
void test3()
{
DWORD t1,t2;
t1 = timeGetTime();
foo(); //dosomething
t2 = timeGetTime();
printf("Use Time:%f\n",(t2-t1)*1.0/1000);
}
4、QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时。但是QueryPerformanceCounter()确切的精确计时的最小单位是与系统有关的,所以必须要查询系统以得到QueryPerformanceCounter()返回每秒嘀哒声的个数。
void test4()
{
LARGE_INTEGER t1,t2,tc;
QueryPerformanceFrequency(&tc);
QueryPerformanceCounter(&t1);
foo(); //dosomething
QueryPerformanceCounter(&t2);
printf("Use Time:%f\n",(t2.QuadPart - t1.QuadPart)*1.0/tc.QuadPart);
}
5、GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。
void test5()
{
DWORD t1,t2;
t1 = GetTickCount();
foo();//dosomething
t2 = GetTickCount();
printf("Use Time:%f\n",(t2-t1)*1.0/1000);
}
foo()函数如下:
void foo()
{ long i; for (i=0;i<100000000;i++)
{ long a= 0;
a = a+1;
}
}
2023-07-11 广告
2017-01-05