优化流程:通过解释器对源代码进行分析,生成抽象语法树(AST)、执行上下文等并进行语义分析和优化,最终生成可执行代码。
在编写程序时,经常会使用条件语句判断不同的情况并作出相应的处理。if…else和switch…case是两种常见的条件语句,它们的作用相同,但是在实际使用中,很多人更喜欢使用switch…case。那么为什么switch…case比if…else执行效率高呢?
-
抽象语法树
抽象语法树(Abstract Syntax Tree,简称 AST)是源代码语法结构的抽象表示。在执行过程中,if…else 语句需要逐一检查每一个条件,因此其构造的 AST 相对复杂,需要大量的计算资源去解析,而 switch…case 语句相对比较简单,其构造的 AST 树结构比 if…else 简单得多,使得其解析效率更高。 -
分支跳转表
switch…case 语句中,不同的 case 可以直接跳转到相应的代码块,而不需要像 if…else 那样逐一判断每一个条件。这是因为switch…case 语句在编译时就已经生成了分支跳转表,通过该表可以在O(1)的时间内快速找到相应的代码块。而且,跳转表可以利用CPU的预取技术,将跳转地址提前载入缓存,从而避免了分支预测失败、缓存未命中等导致的性能瓶颈。
下面是使用 if…e