if else 和 switch

当 case 语句少的时候,C编译器将其转成 if..else.. 类型进行处理,运用较多的cmp 与 jmp 语句 ,而当 case 语句较多的时候,C编译器会出成一个跳转表,而直接通过跳转表进行跳转,这让 switch 具有非常高的效律,而且效律几乎不会因为case 语句的增长而减小。

为什么 case 语句在不加break的时候具有直通性?
这是因为跳转是在进入 switch 是计算出的,而不是在case语句中计算出的,整个case 语句群就是一块完整而连续的代码,只是switch让其从不同的位置开始执行。

if else 和 switch的效率:
switch在判断分支时,没有判断所有的可能性,而是用一个静态表来解决这个问题,所以速度要比if-else快。
但是,switch对较复杂的表达式进行判断,所以当我们需要判断一些简单数值时,用switch较好。

相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。

if-else只是单纯地一个接一个比较,效率比较低
switch的效率一般比if-else高

switch 效率高, 从汇编代码可以看出来
switch 只计算一次值 然后都是test , jmp,
if…else 是每个条件都要计算一遍的.

switch的效率与分支数无关
当只有分支比较少的时候,if效率比switch高(因为switch有跳转表)
分支比较多,那当然是switch

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页