【发布时间】:2019-04-25 02:30:38
【问题描述】:
我的 Prog.c 包含一个简单的 switch case,如下所示:
switch (x)
{
case 1:
p=2;
break;
case 2:
p=3;
break;
case 3:
p=4;
break;
case 4:
p=5;
break;
case 5:
p=6;
break;
default:
break;
}
我编译了这个程序
gcc -g -v prog.c
并使用
创建了 objdumpobjdump -S -l a.out>dump_file
对于 switch case 语句,我发现已经创建了一个间接分支 (jmp *%eax)。
但如果我删除任何一个 case 语句,就不会创建间接分支。
gcc 版本:5.4.0
我不明白为什么会这样?
【问题讨论】:
-
向我们展示输出可能很有用。目前您可以简单地执行
if (x>=1 && x<=5) p=x+1;或跳转到从x计算的地址。如果您的案例列表中有空白,则此方法无效。 -
编译器优化决定使用间接跳转而不是多重比较。
标签: c