计算程序运行时间(acm用)

几种计算程序运行时间的方法

  一些传统的编译器,在编译时就会给出基本的程序跑的时间,有的IDE甚至每次跑都会给出时间(如vc6.0)非常方便。但现在一些环境(如vs)就没有这个功能了,对一些追求运行时间的acmer们很不方便,这里记录几种方式自己进行处理。


一、GetTickCount函数

#include<iostream>
#include<windows.h>
int main()
{
DWORD start_time=GetTickCount();
{
//此处为被测试代码
}
DWORD end_time=GetTickCount();
cout<<"The run time is:"<<(end_time-start_time)<<"ms!"<<endl;//输出运行时间
return 0;
}

二、clock()函数

#include<iostream>
#include<time.h>
int main()
{
clock_t start_time=clock();
{
//被测试代码
}
clock_t end_time=clock();
cout<< "Running time is: "<<static_cast<double>(end_time-start_time)/CLOCKS_PER_SEC*1000<<"ms"<<endl;//输出运行时间
return 0;
}

三、WindowsAPI

#include<iostream>
using namespace std;
int main()  
{   
long HighStart,LowStart,HighEnd,LowEnd;  
long numhigh,numlow;  
//获取代码运行开始时cpu内部计数器的值  
__asm   
{  
RDTSC  
mov HighStart, edx  
mov LowStart, eax  
}  
for(int i= 0; i<100000; i++ )  
{  
  for(int i= 0; i<100000; i++ )  
  {  

  }
}  
//获取代码结束时cpu内部计数器的值,并减去初值  
  __asm  
{  
RDTSC  
mov HighEnd, edx  
Mov LowEnd, eax  
;获取两次计数器值得差  
sub eax, LowStart  
cmp eax, 0 ; 如果低32的差为负则求返,因为第二次取得永远比第一次的大  
jg L1  
neg eax  
jmp L2  
  L1: mov numlow, eax  
  L2: sbb edx, HighStart  
mov numhigh, edx 
}  
  //把两个计数器值之差放在一个64位的整形变量中  
  //先把高32位左移32位放在64的整形变量中,然后再加上低32位  
__int64 timer =(numhigh<<32) + numlow;  
  //输出代码段运行的时钟周期数  
  //以频率1.1Gcpu为例,如果换计算机把其中的1.1改乘其它即可,因为相信大家的cpu都应该在1G以上 ^_^  
cout<< (double) (timer /1.1/1000000000) << endl;  
return 0;  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值