C语言switch执行原理,Switch 底层执行原理

Switch 底层执行原理

switch 底层执行原理

switch 语句根据一个整数索引值进行多重分支, 底层采用跳转表这种数据结构跳转表是一个数组, 表项 i 对应代码段的地址, 当 switch 索引值等于表项 i 时采取对应的程序操作

简单可理解为: 执行 switch 时生成一个长度为最大 case 常量+1 的数组, 程序首先判断 switch 变量是否大于最大 case 常量, 若大于, 则跳到 default 分支处理; 否则取得数组索引号为 switch 变量值大小, 取得数组对应值即为相应 case 代码块地址, 程序接着跳到此地址执行, 完成分支的跳转

但实际计算机底层实现这一操作会更加复杂一点, 以下参考深入理解操作机系统

图 a 是一个简单的 switch 例子, 对于 case 值有 100102~104106;case 值 102 与 104 是没有 break 语句结尾

图 b 是使用 C 语言的扩展形式来描述的, 每个表项都是一个代码块的地址 (指针), 这里的 && 指的就是 &

执行 switch 时, 会生成一张跳转表, 表项数为 (最大 case 值 - 最小 case 值+1), 跳转表是一个数组, 数组是一段连续的内存, jt 数组中包含了 7 个表项 (数组索引对应值), 每个都是指向对应代码块的指针

编译器将 switch 值 n - 最小 case 值 (100), 把取值范围移动到 0 至 6 之间, 创建出一个新的程序变量 index 首先判断 index 是否大于 6, 来判断是否在范围之外, 如果超出直接执行 default, 即 log_def 指针对应代码块

否则, 根据索引的值直接跳转不同位置

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值