switch和if效率比较(反汇编)

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


版权声明:本文为weixin_44018458原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。