我们来看下面的例子:
switch-case控制语句维护着一张跳转表(jump table),并不是用一系列的if-else来实现,在上例中就是标签L7标
记的地方。
跳转表方式大体思想是这样的:
用case语句中的最大值减去最小值求出一个区间,这里是106-100 = 6,即 0到6共有7个可能的case,此时编译器
为该switch-case控制分配长度为7的数组,然后编译器再去查询哪些case是出现了的,就在数组中对应位置填上该
case的地址(即L3,L4,L9,L6),如果没有对应的case就填写default对应的地址(即L2)。最后在执行的时候,只要
用switch的参数(即n)减去case中的最小值,就可以得到一个索引,用这个索引就可以直接跳转到对应的case语
句。这样比用if-else判断效率更高。
下面来具体分析下上面的汇编代码:
swithcase_asm:
pushl %ebp;函数管理用
movl %esp, %ebp;函数管理用
movl 8(%ebp), %eax;得到