C++--流程控制语句

  • 从底层谈流程控制语句
    一般语句是从低地址到高地址(从上往下)顺序执行的,而流程控制语句则不是顺序执行而是通过 jxx 和 cmp (跳转和比较)指令实现的。而不同的流程控制语句之间效率的比较,我们主要是看它们跳转的次数多少,越少跳转,效率越高。不过这些,编译器一般会做优化,如把跳转次数多的控制语句转换成次数少的语句等。

  • if…else 与 switch语句的比较
    if 语句条件判断对应的汇编跳转指令的条件是相反的,因为if是为真则不跳转,所以对应的汇编指令是为假则跳转。而switch的条件判断与汇编指令的条件判断是一致的。而且switch语句的执行效率要比if…elseif…这种语句要高,其具体原因:(1)首先是switch语句的跳转次数更少,它的底层汇编操作是把所有条件比较和所有具体执行语句分成两块写,这样只需先顺序比较,找到匹配,跳转到对应case语句体,只需1次跳转。而if形式的是将每条条件比较指令后紧跟对应语句体,即每比较一次就得跳转一次。(2)再者,对于switch语句编译器还做了优化,会生成对应地址表和索引表,可以不需要比较,直接匹配到对应的case语句体。

  • do,while,for比较
    不谈编译器优化,它们的效率高低是:do > while > for,因为底层do语句只需跳转一次,while需要跳转两次,for则需要跳转3次。不过编译器一般会做优化,如会把while, for语句转换成do语句形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值