求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店康姆。给我写信发来。

最后这个语言有点霸道哦,不过还是回答您前面好点:STC12C5A60S2可以运行大约59-60K左右的程序,子函数多,是多少?我最大的是运行了57.5K,再高就溢出了,不能正常运转,不过你这个具体需要实现那些功能呢?如果您很多,建议您使用STM32,512K的,或者ARM的,可以外扩flash。追问

哦,谢谢,我的子函数目前有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语言程序:如何获得一个程序运行的时间? 最好带一段简单的代码 新人学不懂 呵呵 谢谢大家啦的主要内容,如果未能解决你的问题,请参考以下文章

求一个STC-89C52RC控制12864液晶显示的程序

求java中计算程序运行时间的函数!

Python如何获得程序运行时间的格式化显示

c语言如何获得文件当前路径?

带注释的可执行文件反汇编

vb如何获得一个正在运行程序的窗体名称