switch-case和if-else的效率⽐较
偶然之间突然想到测试⼀下if-elseif、if、if-else、switch-case结构以及单纯通过遍历数组匹配的执⾏效率,发现选⽤正确的程序结构对于程序执⾏效率的影响还是挺⼤的。⾸先说说if-elseif、if、if-else三种的执⾏情况,对于这三种情况执⾏结果是。。差别不⼤,三种结果各循环1亿次,两次跑出来结果如下:
可见这三种结构看上去对程序的执⾏效率影响不是太⼤。switch case判断字符串
同时⼜测试了if-elseif、switch-case结构以及单纯通过遍历数组匹配的效率,执⾏两次的结果如下:
可见switch-case的效率略⾼于if-elseif结构,通过查阅资料得到下⾯⼀些结果。
switch-case与if-elseif的根本区别在于汇编时,switch-case会⽣成⼀个跳转表来指⽰实际的case分⽀的地址,⽽这个跳转表的索引号与switch变量的值是相等的。从⽽,switch-case不⽤像if-elseif那样遍历条件分⽀直到命中条件,⽽只需访问对应索引号的表项从⽽到达定位分⽀的⽬的。
具体地说,switch-case会⽣成⼀份表项数为case量+1的跳表,程序⾸先判断switch变量是否⼤于(⼩于)最⼤(最⼩)case 常量,若⼤于(⼩于),则跳到default分⽀处理;否则取得索引号为switch变量⼤⼩的跳表项的地址(即跳表的起始地址+表项⼤⼩*索引号),程序接着跳到此地址执⾏,到此完成了分⽀的跳转。
由此看来,switch-case结构有⼀点以空间换时间的意思,当分⽀较多的时候明显switch-case结构的实⾏效率会⾼很多。但是switch-case 的缺点是只能处理常量的匹配,在仅有常量选择分⽀的时候,可以选⽤switch-case结构,⽽此时通过遍历数组⽐较更是不可取的⼀种⽅式,但是if-elseif可以应⽤于更多的场合(如a > 10 && a < 20),显得更为灵活。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论