在C/C++中,一般for循环中执行一次需要多少时间?
在C/C++中,一般for循环中执行一次需要多少时间?比如for(i=0;i<10000;i++)请详细说明一下....
在C/C++中,一般for循环中执行一次需要多少时间?
比如
for (i=0;i<10000;i++)
请详细说明一下. 展开
比如
for (i=0;i<10000;i++)
请详细说明一下. 展开
5个回答
2013-07-25
展开全部
执行的速度是和平台有关的,没有一个确切的规定,就如同同一个引用程序在P4的电脑上和P2的电脑上运行所需要的时间是不同的一样。
你需要了解很多方面的只是,首先,你得知道目标平台处理器的确切主频,即多少MHZ。还要了解编译器会将这些代码编译成多少条机器指令,并了解这些机器指令的执行周期。
例如12MHz的8051单片机的指令周期为1us。而for语句需要经过mov dec jnz等多条指令,所以它至少需要1000*3*1us,也就是肯定要高于30000us
你需要了解很多方面的只是,首先,你得知道目标平台处理器的确切主频,即多少MHZ。还要了解编译器会将这些代码编译成多少条机器指令,并了解这些机器指令的执行周期。
例如12MHz的8051单片机的指令周期为1us。而for语句需要经过mov dec jnz等多条指令,所以它至少需要1000*3*1us,也就是肯定要高于30000us
2013-07-25
展开全部
可以自己计算
clock_t start=clock();
for (i=0;i<10000;i++) {}
clock_t finish=clock();
double totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
clock_t start=clock();
for (i=0;i<10000;i++) {}
clock_t finish=clock();
double totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不同的编译软件,对 for 语句的编译也不尽相同,以keil 为例,对 for(i=0;i<1;i++) n++;(i,n 均为 char 型或 unsigned char 型)进行编译,得:
①一条赋值语句(i=0) 2个机械周期,
②一条判断语句(i<1) 4个机械周期,
③一条自增语句(n++) 1个机械周期,
④又一条自增语句(i++) 1个机械周期,
⑤又一条判断语句(i<1) 4个机械周期,结束。
共计 12个机械周期。
而且,如果 i 或 n 为 int 型,单片机为 8位单片机,那么结果也不一样,8位单片机只能进行8位运算,对 int 型的 16位数据,需要进行 拆分(分高、低8位),判断时需先比较高8位,条件无法判断,再进行比较低8位。16位数据 赋值 与 自增 运算也是需要想进行低8位运算,再根据 借位(进位)结果进行高8位运算。整个过程增加了不少执行周期,远大于12个机械周期。
①一条赋值语句(i=0) 2个机械周期,
②一条判断语句(i<1) 4个机械周期,
③一条自增语句(n++) 1个机械周期,
④又一条自增语句(i++) 1个机械周期,
⑤又一条判断语句(i<1) 4个机械周期,结束。
共计 12个机械周期。
而且,如果 i 或 n 为 int 型,单片机为 8位单片机,那么结果也不一样,8位单片机只能进行8位运算,对 int 型的 16位数据,需要进行 拆分(分高、低8位),判断时需先比较高8位,条件无法判断,再进行比较低8位。16位数据 赋值 与 自增 运算也是需要想进行低8位运算,再根据 借位(进位)结果进行高8位运算。整个过程增加了不少执行周期,远大于12个机械周期。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
机器周期当然是在单片机上才有的说法,不同的单片机采用不同的编译软件,最终都是转成汇编、机器码烧录进单片机。
不同的编译软件,对 for 语句的编译也不尽相同,以keil 为例,对 for(i=0;i<1;i++) n++;(i,n 均为 char 型或 unsigned char 型)进行编译,得:
①一条赋值语句(i=0) 2个机械周期,
②一条判断语句(i<1) 4个机械周期,
③一条自增语句(n++) 1个机械周期,
④又一条自增语句(i++) 1个机械周期,
⑤又一条判断语句(i<1) 4个机械周期,结束。
共计 12个机械周期。
而且,如果 i 或 n 为 int 型,单片机为 8位单片机,那么结果也不一样,8位单片机只能进行8位运算,对 int 型的 16位数据,需要进行 拆分(分高、低8位),判断时需先比较高8位,条件无法判断,再进行比较低8位。16位数据 赋值 与 自增 运算也是需要想进行低8位运算,再根据借位(进位)结果进行高8位运算。整个过程增加了不少执行周期,远大于目前的12个机械周期。
不同的编译软件,对 for 语句的编译也不尽相同,以keil 为例,对 for(i=0;i<1;i++) n++;(i,n 均为 char 型或 unsigned char 型)进行编译,得:
①一条赋值语句(i=0) 2个机械周期,
②一条判断语句(i<1) 4个机械周期,
③一条自增语句(n++) 1个机械周期,
④又一条自增语句(i++) 1个机械周期,
⑤又一条判断语句(i<1) 4个机械周期,结束。
共计 12个机械周期。
而且,如果 i 或 n 为 int 型,单片机为 8位单片机,那么结果也不一样,8位单片机只能进行8位运算,对 int 型的 16位数据,需要进行 拆分(分高、低8位),判断时需先比较高8位,条件无法判断,再进行比较低8位。16位数据 赋值 与 自增 运算也是需要想进行低8位运算,再根据借位(进位)结果进行高8位运算。整个过程增加了不少执行周期,远大于目前的12个机械周期。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-25
展开全部
千分之一秒
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询