for循环用i++还是++i,for循环中i++与++i的循环是否一样

  for循环用i++还是++i,for循环中i++与++i的循环是否一样

  论zy1691博客频道-CSDN for循环专栏中I和I的效率。网

  关于for循环中I和I的效率

  2009-11-21 23:50

  279人阅读

  评论(0)

  收集

  报告for(int I=0;我我)

  我们经常用这段代码做循环。一般I习惯for循环,很少用I。虽然从代码执行的效果来看,两者没有区别,但是它们生成的代码是不同的。

  I:先引用再补充。

  I:引用前添加。

  也就是说。

  I:先在I所在的表达式中使用I的当前值,然后在I上加1。

  I:让I先加1,然后在I所在的表达式中使用I的新值。

  由于使用当前值后I为1,所以会需要一个临时变量来转储,但直接就是1,所以不存在这个问题。

  如果考虑到这一点,就会得出我比我强的结论,是真的吗?

  让代码解释一切。

  使用以下代码进行测试:

  int c=0;

  for(int I=0;我我)

  c=c I;

  STD:cout c;

  调试下的首次编译:

  一.情况

  ;9:int c;

  ;10:for(int I=0;我我)

  movDWORD PTR _i$20035[ebp],0

  jmpSHORT $LN3@wmain

  LN2 @ wmain:

  moveax,DWORD PTR _i$20035[ebp]

  addeax,1

  movDWORD PTR _i$20035[ebp],eax

  LN3 @ wmain:

  cmpDWORD PTR _i$20035[ebp],50;00000032H

  jgSHORT $LN1@wmain

  ;11:c=c I;

  cmpBYTE PTR $T25811[ebp],0

  jneSHORT $LN6@wmain

  pushOFFSET $LN7@wmain

  调用__RTC_UninitUse

  添加esp,4

  一.情况

  ;9:int c;

  ;10:for(int I=0;我我)

  movDWORD PTR _i$20035[ebp],0

  jmpSHORT $LN3@wmain

  LN2 @ wmain:

  moveax,DWORD PTR _i$20035[ebp]

  addeax,1

  movDWORD PTR _i$20035[ebp],eax

  LN3 @ wmain:

  cmpDWORD PTR _i$20035[ebp],50;00000032H

  jgSHORT $LN1@wmain

  ;11:c=c I;

  cmpBYTE PTR $T25811[ebp],0

  jneSHORT $LN6@wmain

  pushOFFSET $LN7@wmain

  调用__RTC_UninitUse

  添加esp,4

  LN6 @ wmain:

  moveax,DWORD PTR _c$[ebp]

  addeax,DWORD PTR _i$20035[ebp]

  movBYTE PTR $T25811[ebp],1

  movDWORD PTR _c$[ebp],eax

  jmpSHORT $LN2@wmain

  $LN1@wmain:

  可见I真的省去了内存操作,直接加eax,1,用I真的可以提升性能。

  当然上面用的是调试版,也就是没有优化。那么当发布被优化时会发生什么呢?

  继续实验。

  一.优化

  ;9:int c;

  ;10:for(int I=0;我我)

  movecx,DWORD PTR _c$[esp 4]

  xoreax,eax

  LL3 @ wmain:

  ;11:c=c I;

  addecx,eax

  inceax

  cmpeax,50;00000032H

  jle shortLL3 @ w main

  一.优化

  ;9:int c;

  ;10:for(int I=0;我我)

  movecx,DWORD PTR _c$[esp 4]

  xoreax,eax

  LL3 @ wmain:

  ;11:c=c I;

  addecx,eax

  inceax

  cmpeax,50;00000032H

  jle shortLL3 @ w main

  结论:不经过编译器优化,I更好。优化后,两者是一样的。好像你喜欢怎么写都没关系。

  但是如果这里的I不是int而是迭代器,那么前面和后面就不一样了,用I会更有效率。虽然在int的情况下没有太大的区别,但是为了语法统一,最好总是使用I的形式。

  所以建议像这样的地方都要用我。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • shell中for循环语句,shell脚本中的for循环
  • shell中for循环语句,shell脚本中的for循环,shell中的for循环用法详解
  • js中for循环语句,js中for循环的两种语法
  • js中for循环语句,for循环语句js,JS中for循环的四种写法示例(入门级)
  • dos批处理命令操作,批处理命令循环语句,DOS 批处理命令For循环命令详解
  • c语言for循环语句用法,c语言中for循环语句详解
  • c语言for循环语句用法,c语言中for循环语句详解,C语言示例讲解for循环的用法
  • java中增强型for循环作用,java增强for循环的语法结构
  • java中增强型for循环作用,java增强for循环的语法结构,java增强for循环的实现方法
  • for循环打印菱形的程序框图,javafor循环输出菱形
  • for循环打印菱形的程序框图,javafor循环输出菱形,Java利用for循环打印菱形的实例教程
  • python for循环跳过,跳出多层for循环
  • python for循环跳过,跳出多层for循环,python跳出双层for循环的解决方法
  • python for 迭代器,迭代器和for循环
  • python for循环递减,python for 数组
  • 留言与评论(共有 条评论)
       
    验证码: