从汇编层面解释switch语句判断快速的原因

时间:2023-03-09 15:44:28
从汇编层面解释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;处下断点,调试执行。如下图。
从汇编层面解释switch语句判断快速的原因
从汇编层面解释switch语句判断快速的原因
  分析汇编代码,有两行跳转代码,分析逻辑如下:
从汇编层面解释switch语句判断快速的原因
从汇编层面解释switch语句判断快速的原因
  上图很清晰了,当flag《=4时,最终跳转到的地址是连续的,间隔为4,就是int型的大小,猜测switch的选项值放在连续地址块。如下图。
从汇编层面解释switch语句判断快速的原因
从汇编层面解释switch语句判断快速的原因
  当flag》=4时,跳转到default分支。如下图。
从汇编层面解释switch语句判断快速的原因
从汇编层面解释switch语句判断快速的原因
  由此可知此switch不需要比较选项值(flag)具体是啥,它将flag和下标关联,从而直接访问相应地址的值作为反馈,速度很快,愉快地结束。