C++/C深入理解for,while和do while循环

本文探讨了for循环在C++中的编译原理,通过gdb工具的反汇编过程,揭示了for循环如何转换为初始化、判断、执行和更新四个步骤的汇编指令。并对比了for循环、while循环和do-while循环的执行效率,指出do-while循环在某些情况下可能提供更高的执行速度。
摘要由CSDN通过智能技术生成

for循环

假设有如下代码,求1到99的和;

 #include <iostream>
using namespace std;
int main() {
 int sum = 0;
 for (int i = 0; i < 100; i++) {
 sum += i;
 }
 return 0;
}

利用gdb的-g选项生成调式文件,执行调试文件,用disas对main函数进行反汇编.得到下图所示汇编代码。
在这里插入图片描述
注: cmpl S2,S1 S1 – S2比较双字,差关系。JG: 大于转移指令,0x63=99(十进制)。
即for(初始化表达式; 循环条件; 表达式) 语句块
被编译为
初始化表达式;
Label1: if(!循环条件) goto Label2;
  代码块;
  表达式;
  goto Label1;
Label2:
从上面可以看到for循环必须执行两次jump,一次是当循环条件为false时,另一次则是在计算完表达式之后;jump指令影响指令的流水,至于while循环,其编译结果和for循环类似

do while循环

即do 语句块 while(循环条件) 被编译为
初始化表达式;
Label1:
  代码块;
if(循环条件) Label1;
从上面可以看到for循环处理为do循环通常可以提高执行速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值