从汇编层面解释switch语句判断快速的原因
源码如下:
#include <stdio.h>
void main(){
int flag;
flag=1;
switch (flag){
case 1:
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
case 4:
printf("4\n");
break;
case 5:
printf("5\n");
break;
default:
printf("%d\n",flag);
}
}
在int flag;处下断点,调试执行。如下图。

分析汇编代码,有两行跳转代码,分析逻辑如下:

上图很清晰了,当flag《=4时,最终跳转到的地址是连续的,间隔为4,就是int型的大小,猜测switch的选项值放在连续地址块。如下图。

当flag》=4时,跳转到default分支。如下图。

由此可知此switch不需要比较选项值(flag)具体是啥,它将flag和下标关联,从而直接访问相应地址的值作为反馈,速度很快,愉快地结束。
Yestoday is history, tomorrow is a mystery, but today is a gift.That is why it's called "present". --《Kung Fu Panda》