C / C ++中的for-for,while-while,for-while和while-for嵌套循环之间是否有速度差异?


回答 1:
整型
main(int argc,char * argv [])
{
   int i,g = 0xf;

   for(i = 0; i <16; i ++)
     G - ;
}
整型
main(int argc,char * argv [])
{
   int i = 0,g = 0xf;

   做{
      G - ;
      i ++;
   } while(i <16);
}
整型
main(int argc,char * argv [])
{
   int i = 0,g = 0xf;

   while(i <16){
      G - ;
      i ++;
   };
}
        .file“ main_for.c”
        。文本
        .globl主
        .type main,@功能
主要:
.LFB0:
        .cfi_startproc
        pushq%rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6,-16
        movq%rsp,%rbp
        .cfi_def_cfa_register 6
        movl%edi,-20(%rbp)
        movq%rsi,-32(%rbp)<---上面的所有内容都是programinit
        movl $ 15,-8(%rbp)<-我们的变量g
        movl $ 0,-4(%rbp)<-我们的变量i
        jmp .L2
.L3:
        subl $ 1,-8(%rbp)<-递减g
        addl $ 1,-4(%rbp)<---递增i
.L2:
        cmpl $ 15,-4(%rbp)<-比较我到15
        jle .L3 <----如果小于或等于,则跳至下一个迭代
        popq%rbp <-----这下面的所有内容都是程序清理
        .cfi_def_cfa 7,8
        退回
        .cfi_endproc
.LFE0:
        .size main,.- main
        .ident“ GCC:(Gentoo 4.7.3-r1 p1.4,pie-0.5.5)4.7.3”
        .section .note.GNU-stack,“”,@ progbits
        movl $ 0,-4(%rbp)<-我们的变量i
        movl $ 15,-8(%rbp)<-我们的变量g
        jmp .L2
.L3:
        subl $ 1,-8(%rbp)<-递减g
        addl $ 1,-4(%rbp)<---递增i
.L2:
        cmpl $ 15,-4(%rbp)<-比较我到15
        jle .L3 <----如果小于或等于,则跳至下一个迭代
        movl $ 0,-4(%rbp)
        movl $ 15,-8(%rbp)
.L2:
        subl $ 1,-8(%rbp)
        addl $ 1,-4(%rbp)
        cmpl $ 15,-4(%rbp)
        jle .L2
       .file“ main_for.c”
        .section .text.startup,“ ax”,@ progbits
        .p2align 4,,15
        .globl主
        .type main,@功能
主要:
.LFB0:
        .cfi_startproc
        代表
        退回
        .cfi_endproc
.LFE0:
        .size main,.- main
        .ident“ GCC:(Gentoo 4.7.3-r1 p1.4,pie-0.5.5)4.7.3”
        .section .note.GNU-stack,“”,@ progbits
主要:
.LFB0:
        .cfi_startproc
        movl $ 15,-4(%rsp)<-----计算的最终条件i(cecI)
        movl $ 16,%eax <-------我们的变量g在寄存器中
        .p2align 4,,10
        .p2align 3
.L2:
        movl -4(%rsp),%edx <----将cecI移至寄存器
        subl $ 1,%edx <---递减cecI
        subl $ 1,%eax <---通过寄存器减g
        movl%edx,-4(%rsp)<-将寄存器移至cecI
        JNE .L2
        代表
        退回
.LFB0:
        .cfi_startproc
        movl $ 15,-4(%rsp)
        movl $ 16,%eax
        .p2align 4,,10
        .p2align 3
.L2:
        movl -4(%rsp),%edx
        subl $ 1,%edx
        subl $ 1,%eax
        movl%edx,-4(%rsp)
        JNE .L2
整型
main(int argc,char * argv [])
{
   整数x,y;
   挥发性g = 0xf;

   for(y = 0; y <16; y ++){
      for(x = 0; x <10; x ++){
         G - ;
      }
   }
}
整型
main(int argc,char * argv [])
{
   int x,y = 0;
   挥发性int g = 0xf;

   for(y = 0; y <16; y ++,x = 0){
      while(x ++ <10){
         G - ;
      }
   }
}
主要:
.LFB0:
        .cfi_startproc
        movl $ 15,-4(%rsp)
        movl $ 16,%ecx
        .p2align 4,,10
        .p2align 3
.L2:
        movl $ 10,%eax
        .p2align 4,,10
        .p2align 3
.L3:
        movl -4(%rsp),%edx
        subl $ 1,%edx
        subl $ 1,%eax
        movl%edx,-4(%rsp)
        JNE .L3
        subl $ 1,%ecx
        JNE .L2