- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
维普资讯
· 158 · 计算机应用研究 2003年
在 VC++6.O中精确测量程序的运行时间
赵家森
(浙江科技学院,计算机系浙江杭州 310014)
摘 要:把程序运行 n次的总时间除以n的方法不能用来测量程序的运行时间,可以通过访问机器的软
件或硬件计数器的方法来测量程序运行一次的时间。给出了在VC++6.0中,正确测量运行时间的程序
段和程序实际运行的结果。对测量的误差进行 了分析,指 出必须从测得的数据中剔除 “坏数据”,在剔除
后数据的误差可达微秒级。最后,指出了在处理8254计数值时的一个易犯的错误,还指 出对被测程序的
运行时间需有一个限制。
关键词:时间测量;算法分析;中断;时间片
中图法分类号:TP311.1l 文献标识码:B 文章编号:1001.3695(2003)04-0158-03
6.0把源程序翻译为PE格式的EXE文件,这种格式的文
1 前言 件不能在 DOS操作系统下运行,必须在 Windows操作
系统下运行。因此在 VC++6.0环境下,对 C++程序
在数据结构和算法分析 中,人们常常采用大 O、小 O
运行时间的测量更不能采用反复执行的方法 ,必须测量
等渐进表示法 ,来分析算法的时间复杂性。这种理论的
分析需要实验分析的补充和验证,对实现算法的程序进 C++程序运行一次的时间。
行运行时间的实际测量 ,能使我们对算法的时间复杂性 另一方面,在Windows下的实时测控系统中,常常需
有一个明确和直观的了解。 要时间延时函数,用于对实时信号的循环采集等。一个
但在很多情况下,一个程序的执行时间只有几十微 时间延时函数的主要部分就是对一段程序运行时间的
秒甚至更短,这就要求测量执行时间的绝对误差必须是 测量 ,当要求延时的精度较高时,也需要精确测量程序
微秒级的。在DOS和早期的Windows操作系统中,系统 运行一次的时间。
提供的时间函数的误差达不到微秒级。为了测量微秒 精确测量程序运行一次的时间,可通过 Windows的
级的时间,一个 自然的方法是求出程序反复运行多次的 API提供的函数进行,也可通过 DOS的I/O库函数进行,
总时间。s~,-mjSahni博士…在获得程序多次运行所需的 还可通过直接嵌入汇编语言的程序段进行。通过 API
总时间后,减去因循环花费的时间,再求平均值。这种 比较方便,但所需的存储空间较大。
方法有两个前提:第一是每次程序运行的时间相同,第
2 通过 API进行测量
二是程序在多次运行中未被 中断。然而,这两个前提都
未必成立。第一个前提从算法分析的角度来看是成立 VC++6.0中,使用 “MFCAppWizard”和 “Win32
的,但在实际运行时却不然。我们可以用实验来观察, Application”等生成的项 目,可使用Win32API来测量程序
例如,在PC机上多次运行一个有大量栈操作的程序,每 的运行时间。在Winbase.h中,有下面的API函数声明:
次所需的时间会有较大的差别。第二个前提在 DOS操 BOOLQueryPerfo~ (LARGE—INTEGER*lpPb 呦anoe_
作系统下就已经难以成立 ,例如在 PC机中,程序在运行 c(№t);
过程中,很可能和定时器的中断不期而遇 (研究算法
文档评论(0)