C语言汇编代码分析(switch case)

本文详细解析了C语言中switch-case结构的汇编实现,重点讨论了跳转表的工作原理和效率优势。当case值区间较小,编译器倾向于使用跳转表,而当区间过大时,为节省内存,编译器可能会采用if-else结构或二分查找优化。理解这些细节有助于编写更高效的C代码。
摘要由CSDN通过智能技术生成

我们来看下面的例子:




 
 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;得到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值