switch 和 if 效率比较
通过反汇编分析下面这段代码
int main(){
int a = 5;
printf("switch\n");
switch (a){
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:
break;
}
printf("if\n");
if (a == 1) {
printf("1\n");
} else if(a == 2) {
printf("2\n");
} else if(a == 3) {
printf("3\n");
} else if(a == 4) {
printf("4\n");
} else if(a == 5) {
printf("5\n");
}
return 0;
}
反汇编代码
switch 反汇编代码
编译器遇到switch实际上是生成了一张跳转表,里面记录了每个分支对应执行语句的地址。
if 反汇编代码
结论
switch:不管条件分支有多少都只会比较一次
if:每个条件分支都比较
建议:条件分支多使用switch