当前位置: 首页 > news >正文

C/C++中如何计算程序运行的时间

转自 http://www.cnblogs.com/zhiqiangliu/p/4904365.html

 

一个程序的功能通常有很多种方法来实现,怎么样的程序才算得上最优呢?举个例子,如果实现同一个功能的两个程序,一个一点按钮就给出运行结果,而另一个则需要漫长的时间去等待,就像安装WINDOWS XP一样(呵呵,太夸张了吧),你会去使用哪个程序呢?毋庸置疑,最优程序的第一条法则就是:程序的运行速度要快。

  那么,既然一个程序能用多种方法来实现,我又如何知道哪种方法是最优的呢?有些程序是显而易见的,你把它运行一下,一个程序要3秒,一个要1秒,你当然能感觉出来。如果都在一秒之内呢,你又可以看申请的内存空间的多少,运算的数据大小,运算过程的简单复杂,有时也能分辨出哪个程序最好,可是有的时候,却不是那么容易看出来,比如它比另一个程序少定义一个变量,可是它又比那另一个程序多用几个除法,那么你就如何比较它们的运行速度呢?办法只有一个——计时!

  C++中的计时函数是clock(),而与其相关的数据类型是clock_t(头文件是time.h)。函数定义原型为: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,它用来表示一秒钟会有多少个时钟计时单元,因此,我们就可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间。

  下面就上面的知识给大家举个例子帮助大家理解。

#include<iostream.h>
#include<time.h>
void main()
{
   clock_t start,finish;
   double totaltime;
   start=clock();

   ……                     //把你的程序代码插入到这里面

   finish=clock();
   totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   cout<<"\n此程序的运行时间为"<<totaltime<<"秒!"<<endl;
}

  如此这般,我们就可以得出程序的运行时间然后进行比较,很简单,很方便吧。
  可能有人要问,如果两个程序的运行时间都少于一秒,我们根本就感觉不到,有比较的意义么?回答是有!因为我们写的可能只是一个很大的程序中的一个功能函数,而在主程序中可能会反复调用这个功能函数,如果一个功能函数比另一个实现同样一个功能函数运行快0.01秒,把这两个函数在主函数中分别调用1000次,效果是显而易见的。
  好了,这是我的一些小经验,希望能给我的LP和其他的朋友们提供一点小小的帮助

转载于:https://www.cnblogs.com/phix/p/7110707.html

相关文章:

  • OA系统和CRM客户关系管理 流程是核心
  • 村路安防建设加速 科学推进安全前行
  • 高维度CRM销售漏斗模型操作中注意事项
  • HR软件Impraise获160万美元种子投资
  • Linux搭建SVN server
  • QTP——使用DOM识别树形节点进行Web测试
  • 《交互式程序设计 第2版》一3.10 更进一步
  • 苏州扎实推进消防大数据 综合业务平台试点应用
  • 《电子元器件的可靠性》——第3章可靠性试验
  • 《嵌入式系统数字视频处理权威指南》—— 导读
  • 微软重拾荣光:股价距1999年历史高点仅差7%
  • Java for Selenium(webdriver) 环境搭建
  • 你的电脑会感染勒索病毒吗?快用这款工具查一下
  • 2017技术趋势:最受欢迎的几大工具
  • 新加坡打造绿色数据中心任重道远
  • extract-text-webpack-plugin用法
  • Facebook AccountKit 接入的坑点
  • javascript 哈希表
  • mac修复ab及siege安装
  • Meteor的表单提交:Form
  • MQ框架的比较
  • Vue官网教程学习过程中值得记录的一些事情
  • Yeoman_Bower_Grunt
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 基于组件的设计工作流与界面抽象
  • 前端面试总结(at, md)
  • 如何进阶一名有竞争力的程序员?
  • 为什么要用IPython/Jupyter?
  • 自动记录MySQL慢查询快照脚本
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ${factoryList }后面有空格不影响
  • (20050108)又读《平凡的世界》
  • (二开)Flink 修改源码拓展 SQL 语法
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Windows2003安全设置/维护
  • (转)大道至简,职场上做人做事做管理
  • (转)负载均衡,回话保持,cookie
  • .apk文件,IIS不支持下载解决
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 设计模式初探
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET的微型Web框架 Nancy
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • ::前边啥也没有
  • @Autowired自动装配
  • [ IO.File ] FileSystemWatcher
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [BZOJ 1040] 骑士
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)