计算程序的执行时间

在windows下计算一段程序的执行时间,有以下方法:
(1):使用[url=http://msdn.microsoft.com/en-us/library/4e2ess30%28VS.71%29.aspx]clock()[/url]函数(需包含头文件time.h)
我的c程序代码如下:

/* computer execution time using clock() */
/* the prototype : clock_t clock(void); */
/* document url: msdn.microsoft.com/en-us/library/4e2ess30(VS.71).aspx */

#include <stdio.h>
#include <time.h>

#define LOOPNUM 35000

int Func(int n)
{
int i,j;
double result=0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
result += i*j;
return 0;
}
double MeasureTime(int (*f)(int),int n)
{
clock_t start,end;
double TotTime;
start = clock();
(*f)(n);
end = clock();
TotTime = (double)(end-start)/CLOCKS_PER_SEC;
printf("CLOCKS_PER_SEC is %d\n",CLOCKS_PER_SEC);
printf("The total time is %.5f\n",TotTime);
return TotTime;
}
int main(void)
{
MeasureTime(Func,LOOPNUM);
return 0;
}

在我电脑上(速龙3000+,32位winxp)用mingw编译,输出结果为:
[color=gray]CLOCKS_PER_SEC is 1000
The total time is 9.75000[/color]

clock()函数返回时钟所走过的滴答数,其精度只能到毫秒(千分之一秒)。
(2)使用[url=http://msdn.microsoft.com/en-us/library/ms644905%28VS.85%29.aspx]QueryPerformanceFrequency[/url]和[url=http://msdn.microsoft.com/en-us/library/ms644904%28v=VS.85%29.aspx]QueryPerformanceCounter[/url] 函数(需包含头文件winbase.h)
我的c程序代码如下:
/* computer execution time using QueryPerformanceCounter()
* and QueryPerformance Frequency()
* head file need to be included <winbase.h>
* function prototype:
* http://msdn.microsoft.com/en-us/library/ms644904(v=VS.85).aspx
*BOOL WINAPI QueryPerformanceCounter(__out LARGE_INTEGER *lpPerformanceCount);
*BOOL WINAPI QueryPerformanceFrequency(__out LARGE_INTEFER *lpFrequency);
*/
/* LARGE_INTEGER definition(in winnt.h>:
typedef union _LARGE_INTEFER{
struct{
DWORD LowPart;
LONG HighPart;
}
struct{
DWORD LowPart;
LONG HighPart;
}u;
LONGLONG QuadPart;
}LARGE_INTEFER,*PLARGE_INTEGER;
*/

#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <winbase.h>
/* #include <winnt.h>*/

#define LOOPNUM 35000

int Func(int n)
{
int i,j;
double result=0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
result += i*j;
return 0;
}
double MeasureTime(int (*f)(int),int n)
{
LONGLONG start,end;
LARGE_INTEGER largeint;
double TotTime,freq;
QueryPerformanceFrequency(&largeint);
freq = (double)largeint.QuadPart;
QueryPerformanceCounter(&largeint);
start = largeint.QuadPart;
(*f)(n);
QueryPerformanceCounter(&largeint);
end = largeint.QuadPart;
TotTime = (double)(end-start)/freq;
printf("Performance frequency is %f\n",freq);
printf("The total time is %.9F\n",TotTime);
return TotTime;
}
int main(void)
{
MeasureTime(Func,LOOPNUM);
return 0;
}

在我电脑上(速龙3000+,32位winxp)用mingw编译,输出结果为:
[color=gray]Performance frequency is 3579545.000000
The total time is 9.832611687[/color]

这段代码写的很粗糙,没有考虑返回错误的情况。虽然我用mingw编译,但是用其他的工具(VisualStudio等)应该也没有问题的,这两个函数是属于windows函数,windows 2000 pro以后的操作系统应该都能使用此程序
另外,需要指出的是,windows下的QueryPerformanceCounter和QueryPerformanceFrequency统计时间的方法使用了一个被称为[url=http://en.wikipedia.org/wiki/Time_Stamp_Counter]Time Stamp Counter[/url]的寄存器(从奔腾cpu时起即开始有该寄存器),可以直接用嵌入式汇编(或者有些IDE已经直接提供了对应的函数)读取该寄存器的值,然后计算程序执行时间。

我的这两个程序的Makefile代码如下:
CC=gcc
CFLAGS=-Wall -ansi -o
LDFLAGS=-lm
all:clock counter
clock:clock.c
$(CC) $(CFLAGS) $@ $<
counter:counter.c
$(CC) $(CFLAGS) $@ $<


至于在Linux下统计程序的执行时间,可以使用[url=http://pubs.opengroup.org/onlinepubs/009695399/functions/gettimeofday.html]gettimeofday()[/url](参见[url=http://codeprac.iteye.com/blog/1058806]《数据结构与算法分析-C语言描述》习题2.6[/url],它能实现微妙级(百万分之一秒)的准确度)或者[url=http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_gettime.html]clock_gettime()[/url](可实现纳秒级(十亿分之一秒)的准确度)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文带你看完ZooKeeper!

作者 | FrancisQ来源 | JavaGuide“文章很长&#xff0c;先赞后看&#xff0c;养成习惯。❤️ ???? ???? ???? ???? ????”什么是ZooKeeperZooKeeper 由 Yahoo 开发&#xff0c;后来捐赠给了 Apache &#xff0c;现已成为 Apache 顶级项目。ZooKeeper 是一…

c# uri.host_C#| Uri.HostNameType属性与示例

c# uri.hostUri.HostNameType属性 (Uri.HostNameType Property) Uri.HostNameType Property is the instance property of Uri class which used to get the type of hostname specified in the given URI. This property returns a string value. This property may generate …

Struts里面的配置笔记

xml配置 package 用来区分重名 namespace 必须/开头 里面写的内容 前台反问的时候就加上 如果不写的话 只要你在url里面敲action都可以访问的到 result 默认的是SUCCESS 拷贝一个工程的时候要注意修改web里面的 context-root 转载于:https://www.cnblogs.com/yuzhengdong/p/394…

2023年底和2024年节假日及补班日期

holiday:#节假日- 2023-12-30- 2023-12-31- 2024-01-01- 2024-02-10- 2024-02-11- 2024-02-12- 2024-02-13- 2024-02-14- 2024-02-15- 2024-02-16- 2024-02-17- 2024-04-04- 2024-04-05- 2024-04-06- 2024-05-01- 2024-05-02- 2024-05-03- 2024-05-04- 2024-05-05- 2024-06-10-…

一些书评网站

http://c2.com/cgi/wiki?CategoryBook 计算机方面的书籍推荐 http://bookshelved.org/cgi-bin/wiki.pl?backBookOnTheBookshelf 各种书籍推荐 http://accu.org/index.php?modulebookreviews&funcsearch accu书评 http://www.softpanorama.org/Bookshelf/classic.s…

HashMap 的 7 种遍历方式与性能分析!「修正篇」

这是我的第 57 篇原创文章首先&#xff0c;给大家说声抱歉~事情经过是这样子的&#xff0c;五一节前我发布了一篇文章《HashMap 的 7 种遍历方式与性能分析&#xff01;》&#xff0c;但是好心的网友却发现了一个问题&#xff0c;他说 “测试时使用了 sout 打印信息会导致测试的…

c# uri.host_C#| Uri.EscapeUriString()方法与示例

c# uri.hostUri.EscapeUriString()方法 (Uri.EscapeUriString() Method) Uri.EscapeUriString() method is a static method that is used to convert specified Uri string in escaped representation. Uri.EscapeUriString()方法是一个静态方法&#xff0c;用于转换转义表示形…

今天是 OSChina 上线 6 周年!

2019独角兽企业重金招聘Python工程师标准>>> 没什么想说的&#xff0c;除了感谢和继续努力外&#xff0c;感谢所有的 oscers 们、感谢 OSC 曾经和现在的小伙伴、感谢我们的合作伙伴。 今年还有4个月&#xff0c;主要工作安排包括&#xff1a; TeamOSC 上线 PaaSO…

coroutine资源索引

coroutine (通常被译为“协作程序”或"共行程序“&#xff09;是程序设计中一个非常重要的概念&#xff0c;通常可用于多任务协作处理、迭代器和管道中。它最早出现于”Design of a Separable . Transition -Diagram Compiler “这篇论文中,taocp (the art of computer p…

操作系统大内核和微内核_操作系统中的内核I / O子系统

操作系统大内核和微内核内核输入/输出子系统 (Kernel Input / Output subsystem) Input and output (I/O) devices permit us to communicate with the computer system. I/O is the transfer of data between RAM and various I/O peripherals. By using Input devices such a…

StackOverflow 上面最流行的 7 个 Java 问题!

StackOverflow发展到目前&#xff0c;已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案&#xff0c;同时我们也会从中学习到很多新的东西。这篇文章是在我们审阅了StackOverflow上最流行的Java问题以及答案后从中挑出来的。即使你是一个…

UbuntuKylin安装SUN JDK1.7

1.下载jdk1.7.0_67并且解压&#xff0c;放知道/usr/local/lib/jvm目录下tar zxvf jdk1.7.0_67.tar.gzsudo mv jdk1.7.0_67 /usr/local/lib/jvm2.编辑~/.bashrc文件&#xff0c;添加如下内容。JAVA_HOME后的内容为你自定义的JDK存放目录export JAVA_HOME/usr/local/lib/jvm/jdk1…

程序设计竞赛资源索引

如果想提高编程能力&#xff0c;最重要的就是多练多学&#xff0c;现在网络上提供了大量的习题库&#xff0c;可以很方便的练习编程。 ACM/ICPC题库(支持c,c,java,pascal)&#xff1a; 台州学院acm :有不少习题使用中文描述&#xff0c;分类清晰&#xff0c;适合初学者。题目…

c++ stl stack_C ++ STL中的stack :: push()函数

c stl stackPrototype: 原型&#xff1a; stackst; //declarationst.push(T item);Parameter: 参数&#xff1a; T item; //T is the data typeReturn type: void 返回类型&#xff1a; void Header file to be included: 包含的头文件&#xff1a; #include <iostream&…

if快还是switch快?解密switch背后的秘密

这是我的第 57 篇原创文章条件判断语句是程序的重要组成部分&#xff0c;也是系统业务逻辑的控制手段。重要程度和使用频率更是首屈一指&#xff0c;那我们要如何选择 if 还是 switch 呢&#xff1f;他们的性能差别有多大&#xff1f;switch 性能背后的秘密是什么&#xff1f;接…

MySQL replace into (insert into 的增强版)

在使用SQL语句进行数据表插入insert操作时&#xff0c;如果表中定义了主键&#xff0c;插入具有相同主键的记录会报错&#xff1a; Error Code: 1062. Duplicate entry XXXXX for key PRIMARY(主键冲突) 这样我们只好检查主键是不是存在&#xff0c;若存在则更新&#xff0c;若…

最大连续子序列和问题

问题描述&#xff1a;给定一个序列a[1],a[2]...a[n]&#xff0c;求解其连续子序列中元素和的最大值 例如&#xff1a; 6 -1 5 4 -7 这个序列最大连续子序列和为14 具体问题见&#xff1a; [urlhttp://acm.hdu.edu.cn/showproblem.php?pid1003]HDOJ 1003[/url] [urlhttp://acm.…

js 数组添加n次相同元素_数组中两次出现相同元素之间的最大距离

js 数组添加n次相同元素Prerequisite: Hashing data structure 先决条件&#xff1a; 哈希数据结构 Problem statement: 问题陈述&#xff1a; Find maximum distance between two occurrences of same element in the array. 查找两次出现的相同元素在数组中的最大距离。 E…

一道题决定去留:为什么synchronized无法禁止指令重排,却能保证有序性?

前几天有一位读者找我问一个问题&#xff0c;说是这道题可能影响了他接下来3年的技术成长。据说这位读者前面的很多问题会的都还可以&#xff0c;属于那种可过可不过的类型的&#xff0c;面试官出了最后一道题&#xff0c;就是回答的满意就可以给Offer&#xff0c;回答的不好就…

haskell程序设计语言

根据[urlhttp://www.haskell.org/haskellwiki/Haskell]haskell[/url]的[urlhttp://www.haskell.org/haskellwiki/Introduction]官方定义[/url]&#xff0c;haskell是polymorphically(多态&#xff09; statically typed静态类型&#xff09;, lazy&#xff08;懒计算&#xff0…