if...else与switch...case比较

同上一篇,看《c++反汇编与逆向分析技术揭秘》总结。

if...else与switch...case比较

1 分支数低于4个时,if…else地效率高于switch…case(VC6.0)

2 分指数大于等于4个且case条件具有明显的线性关系时,switch…case效率高于if…else,但会占用额外空间

3 当分支地case条件之间不具有明显线性关系时,效率会有所下降,且会占用更多额外空间

1 原因:

VC6.0编译器在低分支时,switch…case是模拟if…else进行处理地,所以效率较低

2 原因:

当分支数大于3,且分支条件具有明显线性关系时,switch…case会维护一个case地址数组,也称“case地址表”,将case条件作为下标直接跳转,而不是一个一个地顺序执行地分支判定

3 原因:

case差值低于255时(一字节索引范围以内),此时会在创建case地址表的基础上再维护一个索引表,一一对应的进行分支跳转

case差值高于255时(一字节索引范围以外),此时将会以一种二叉判定树的方式进行case语句的比对选择。然后再对各分支叶子节点进行判断,步骤如下:
1)子节点(case条件个数)小于4,直接使用if…else结构进行处理

2)子节点大于等于4,case具有明显线性关系,创建case地址表,详细见上文2

3)子节点大于等于4,case不具有明显线性关系且case差值低于255,创建case地址表,并再维护一个索引表,详情见上文3

4)子节点大于等于4,case不具有明显线性关系且case差值高于255再次进行判断树创建,并递归上述操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值