求C语言程序:如何获得一个程序运行的时间? 最好带一段简单的代码 新人学不懂 呵呵 谢谢大家啦
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求C语言程序:如何获得一个程序运行的时间? 最好带一段简单的代码 新人学不懂 呵呵 谢谢大家啦相关的知识,希望对你有一定的参考价值。
clock()函数,计算代码消耗的cpu时间,一般用处不大time()函数,获取系统时间,许多依赖于time()计算超时的程序,在修改系统时间后一般都不能正常运行。
因此本人推荐:
windows下:计算绝对时间QueryPerformanceCount/QueryPerformanceFrequency.
cpu脉冲计数/ cpu频率,获得开机以来的秒数。
当然,这两个函数获得时间精度是很高的(us级别),只是我们一般用不到这么精确。
linux下:
#include <sys/sysinfo.h>
调用sysinfo()获得系统启动以来经历的秒数时间。这个不属于高精度计时。
如果要进行高精度计时,高精度时间,C运行库的gettimeofday().(当然据我估计也是受到系统更改时间的影响)。
用绝对时间判断系统时间有没有被更改,用高精度时间精确计时,二者结合才是王道。 参考技术A #include <stdlib.h>
#include <time.h>
#include <stdio.h>
void my_subroutine(long n)
// timing a subroutine call:
char s[16];
for (long i = 0; i < n; i++)
_itoa(i, s, sizeof(s));
int main(int argc, char* argv[])
long n = 1000000;
clock_t start = clock(); //记录开始时间
my_subroutine(n); //调用函数,花费时间
clock_t finish = clock(); //结束时间
double duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf("Time for %d iterations: %lf s",n,duration);
return 0;
本回答被提问者采纳 参考技术B 用time.h头文件中的时间函数
time_t time(time_t *tp);
其中time_t是unsigned long,显示从GMT1970年1月1日00:00:00开始的秒数
函数作用:以秒为单位将传值调用的参数的值设置为系统时间,返回值也是系统时间
例:
#include <time.h>
#include <stdio.h>
int main()
time_t t,t2;
t=time(&t);
...//程序段
t2=time(&t2);
printf("程序运行时间%ld秒",t2-t);
return 0;
参考技术C clock()函数测试当前程序所使用的处理时间
#include "stdio.h"
#include "time.h"
#include<iostream>
using namespace std;
int main()
clock_t start,stop;
double result;
long i=999999999L;
start=clock();
while(i)
i--;
stop=clock();
result=(double)(stop-start)/CLOCKS_PER_SEC;
cout<<result<<"\n";
请问51单片机最大可以运行多大的程序,最好是STC的,C语言
请问51单片机最大可以运行多大的程序,最好是STC的,C语言。
比如:STC5A60S2
可以运行多大程序?
如果子函数很多,会堆栈溢出吗?怎么避免?
谁有运行成功的大的复杂的STC的C语言程序?发来看看。我要飞机2005圈a126店康姆。给我写信发来。
哦,谢谢,我的子函数目前有15个左右,目前的功能已经堆栈溢出了,主函数进来后下面有一个while(1)循环体,这个循环体有点大,多数子函数在里面,还有嵌套调用子函数的地方。找了很多遍,改了很多地方,偶尔能改好,那次是把更多的功能加到了另外的子函数,再调用这个子函数。可是后来又改了其中的一点点其他程序(改动本身没任何问题)。就又不行了!代码量有404行
追答404行代码有多少啊,太少了!不超过3K程序。
追问是啊,就是不知道为什么不行,尝试了15种方案,还是没调试成功!一会尝试扩展RAM从xdata改为idata(后512字节),大家说可行吗?
追答你调试不成功的原因是什么可以分享不,因为404行代码并不多,很少的!
参考技术A 这款单片机最大内部程序空间为60K,解决堆栈溢出问题,可以将其内部的2KRAM使用起来,这样就可以不用担心堆栈溢出问题了。 参考技术B stc12c5a60s2的芯片内部已经集成了拓展的ram 共有1280追问这位朋友,不是内存不够用,是堆栈溢出!明白吗?
追答你定义的全局变量太多吧,定义时可以考虑用xdata idata 说明存储的位置 ,实在不行考虑换芯片
参考技术C 51单片机是准16位单片机 其寻址范围为 2^16/1024=64kb建议换芯片吧 如果程序很大 参考技术D 你编译完了之后keil会有一个报告的,里面idata,xdata,用了多少都能看到,只要没超出芯片的参数就可以
以上是关于求C语言程序:如何获得一个程序运行的时间? 最好带一段简单的代码 新人学不懂 呵呵 谢谢大家啦的主要内容,如果未能解决你的问题,请参考以下文章