大家好,今天来为大家分享程序执行时间的一些知识点,和程序运行的黑框叫什么的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
本文目录
- cpu执行时间的计算,求详解
- vc ++获取程序执行时间时间
- 程序执行一条语句需要多久的时间
- cpu执行一条指令所需要的时间称为什么
- C语言求一个程序运行时间
- C语言中 ,一个语句执行一般(家用PC)需要多少时间
一、cpu执行时间的计算,求详解
中间的斜杠不是除号,是表示“每”,类似与物理单位的“米/秒”。“CPU时钟周期数/程序”的意思是指该程序所有指令的时钟周期数量。“指令条数/程序”是指该程序拥有的指令数量,然后乘以指令的平均周期数量,再乘以时钟周期(的时间),最后得到的就是CPU执行程序所花费的时间了。
二、vc ++获取程序执行时间时间
这个是windows里面常用来计算程序运行时间的函数;
DWORD dwStart= GetTickCount();
则(dwEnd-dwStart)就是你的程序运行时间,以毫秒为单位
这个函数只精确到55ms,1个tick就是55ms。
timeGetTime()基本等于GetTickCount(),但是精度更高
则(dwEnd-dwStart)就是你的程序运行时间,以毫秒为单位
虽然返回的值单位应该是ms,但传说精度只有10ms。
用clock()函数,得到 *** 启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。
他是记录时钟周期的,实现看来不会很精确,需要试验验证;
cout<<"runtime:"<<double(end-begin)/CLOCKS_PER_SEC<<endl;
1.timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;
timelocal函数是GNU扩展的与posix函数mktime相当
time_t timelocal(struct tm*tm);
3.gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;
struct tm* gmtime(const time_t*clock);
struct tm* localtime(const time_t*clock);
2.stime其参数应该是GMT时间,根据本地时区设置为本地时间;
4.文件的修改时间等信息全部采用GMT时间存放,不同的 *** 在得到修改时间后通过localtime转换成本地时间;
5.设置时区推荐使用setup来设置;
6.设置时区也可以先更变/etc/sysconfig/clock中的设置再将ln-fs/usr/share/zone *** /xxxx/xxx/etc/localtime才能重效
time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t
看看你的 *** 是否有time_t *** ,它能表示更大的时间范围
CTime MFC类,好像就是把time.h封了个类,没扩展
在time.h中的_strtime()//只能在windows中用
下面是转的一个用汇编的精确计时 ***
---------------------------------------------------------------------------------------
如何获得程序或者一段代码运行的时间?你可能说有专门的程序测试工具,确实,不过你也可以在程序中嵌入汇编代码来实现。
在Pentium的指令 *** 中有一条指令可以获得CPU内部 *** 位计数器的值,我们可以通过代码两次获取该计数器的值而获得程序或代码运行的时钟周期数,进而通过你的cpu的频率算出一个时钟周期的时间,从而算出程序运行的确切时间。
我们通过指令TDSIC来获得cpu内部计数器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放 *** 位寄存器中高32位的值,EAX存放第32位的值.
//用汇编实现获取一段代码运行的时间
void GetClockNumber(long high, long low);
long HighStart,LowStart,HighEnd,LowEnd;
//获取代码运行开始时cpu内部计数器的值
for(int i= 0; i<100000; i++)
for(int i= 0; i<100000; i++)
//获取代码结束时cpu内部计数器的值,并减去初值
cmp eax, 0;如果低32的差为负则求返,因为第二次取得永远比之一次的大
//把两个计数器值之差放在一个 *** 位的整形变量中
//先把高32位左移32位放在 *** 的整形变量中,然后再加上低32位
__int *** timer=(numhigh<<32)+ numlow;
//以频率1.1Gcpu为例,如果换计算机把其中的1.1改乘其它即可,因为相信大家的cpu都应该在1G以上 ^_^
cout<<(double)(timer/1.1/1000000000)<< endl;
这样通过一条简单的汇编指令就可以获得程序或一段代码的大概时间,不过并不能得到运行的确切时间,因为即使去掉中间的循环,程序也会有个运行时间,
因为在之一次取得计数器的值后,有两条汇编指令mov HighStart, edx mov LowStart, eax这两条指令当然也有运行时间,当然你可以减去这两条指令的运行时间(在1.1G的机子上是3e-8s),这样会更精确一点。
如果你要确切知道程序的运行时间,专业的测试软件肯定会更好一点,不过好像一般没有必要获取除非专门的要求的程序。
不过能DIY一个也是不错的,不管有没有,最起码你可以学到在VC++中如何嵌入汇编代码以及如何使用32位的寄存器,其实和16位的寄存器一样使用,将来 *** 的也应该一样,只不过位数不同罢了
网上找的,对你应该有帮助。。。
三、程序执行一条语句需要多久的时间
1.C语言源程序通过预处理然后编译,产生汇编代码,不同的汇编代码和指令有不同的执行时间。
2.一个指令的执行时间,用其所需要的指令周期(执行一条指令所需要的时间)来衡量。对于单字节指令,就是一个读取-执行周期(fetch-execute cycle),对于多字节指令,还需要更多的指令周期。
3.一个指令周期,一般是由若干个机器周期(完成一次基本 *** 作需要的时间,比如获取变量在RAM当中的 *** )组成。
4.再一个,时钟周期,这个可以形象一点地和通常所说的主频联系起来,比如CPU核心的主频是2.5GHz,则时钟周期为0.4ns,这个是计算机当中最小的时间计量单位。一个机器周期由若干个时钟周期组成。
四、cpu执行一条指令所需要的时间称为什么
1、cpu执行一条指令所需要的时间称为指令周期,指令周期一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。
2、计算机之所以能自动地工作,是因为CPU能从存放程序的内存里取出一条指令并执行这条指令;紧接着又是取指令,执行指令,如此周而复始,构成了一个封闭的循环。除非遇到停机指令,否则这个循环将一直继续下去。
3、在取指令的阶段,指令是放在存储器(也就是内存)里的,实际上,通过PC寄存器和指令寄存器取出指令的过程,是由 *** (Control Unit) *** 作的。指令的 *** 过程,也是由 *** 进行的。
4、一旦到了执行指令阶段,无论是进行算术 *** 作、逻辑 *** 作的 R型指令,还是进行数据传输、条件分支的 I型指令,都是由算术逻辑单元(ALU) *** 作的,也就是由运算器处理的。不过,如果是一个简单的无条件 *** 跳转,那么可以直接在 *** 里面完成,不需要用到运算器。
5、参考资料来源:百度百科——指令周期
五、C语言求一个程序运行时间
1、 if((n<1)||(m<1))ret *** n 0;
2、 printf("the first clock=%d *** ;n", tb=clock());//打印输出进程运行到此时的挂钟数(近似进程开始)
3、 printf("the last clock=%d *** ;n", te=clock());//打印输出进程运行到此时(快结束而未结束)的挂钟数
4、 printf("%f秒 *** ;n",(float)(te-tb)/CLK_TCK);//把挂钟数转换成时间输出
5、【说明】clock_t clock();函数返回从“开启这个程序进程”到“程序中调用clock()”时之间的cpu时钟计数单元(clock tick)【这个句话请仔细体会】;另外,clock_t实为长整型
6、【错误】在你的代码中,最后一个语句:printf("%lf毫秒",(tb-te)/CLK_TCK);有误,不是 tb-be,是 te-tb
7、【补充】有趣的是, *** 计时包括 scanf()语句等待输入时间,所以你输入快一些或慢一些直接影响到你的第二次周用clock()函数: te= clock();,所以 te这个值取决于你的输入快慢(scanf());如果你把之一个 printf()语句放到 scanf()语句后面去,则你得到的结果将会是0,因为后面两行代码运行太--快--了,就是楼上这位仁兄所说“程序太小,电脑秒杀了”,自己去试试,体会一下吧,祝你学习愉快!
六、C语言中 ,一个语句执行一般(家用PC)需要多少时间
1.C语言源程序通过预处理然后编译,产生汇编代码,不同的汇编代码和指令有不同的执行时间。
2.一个指令的执行时间,用其所需要的指令周期(执行一条指令所需要的时间)来衡量。对于单字节指令,就是一个读取-执行周期(fetch-execute cycle),对于多字节指令,还需要更多的指令周期。
3.一个指令周期,一般是由若干个机器周期(完成一次基本 *** 作需要的时间,比如获取变量在RAM当中的 *** )组成。
4.再一个,时钟周期,这个可以形象一点地和我们通常所说的主频联系起来,比如CPU核心的主频是2.5GHz,则时钟周期为0.4ns,这个是计算机当中最小的时间计量单位。一个机器周期由若干个时钟周期组成。
综上所述,你的问题没有明确的 *** 。这取决于你的CPU的主频,执行的是何种类型的C语言语句,是否编译器有对其进行优化。
好了,文章到此结束,希望可以帮助到大家。