C++--流程控制语句

来源:互联网 发布:软件概要设计范文 编辑:程序博客网 时间:2024/04/30 09:44
  • 从底层谈流程控制语句
    一般语句是从低地址到高地址(从上往下)顺序执行的,而流程控制语句则不是顺序执行而是通过 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语句形式。

0 0
原创粉丝点击