通过汇编码理解switch语句的原理

    技术2022-05-19  21

    http://blog.chinaunix.net/u3/94078/showart.php?id=1888387 

    当需要多次比较时,switch语句的效率比if-else if…… else语句(以后简称muti-if语句)的效率要高,这是我一直以来的理解,但是昨晚讨论到一个问题,这种“高效率”如何实现?今天早上又看到 《更深入一点理解switch语句及c/c++对const的处理》和 《透过IL看C# (1)switch语句》这两篇文章,前者(以后为[1])没有提及case语句中大跨度离散值的原理,后者(以后为[2])使用的离散数据量又比较小,而且该文侧重于用C#,由于不是很了解,不发表评论。  于是就写了一组程序,用gcc编译成汇编码(使用-S开关), 通过解读这些汇编码可以很好的帮助理解switch的原理。文中所涉及的环境为如下,Linux version 2.6.27.5-117.fc10.i686 ( mockbuild@x86-7.fedora.phx.redhat.com) (gcc version 4.3.2 20081105 (Red Hat 4.3.2-7) (GCC) ) #1 SMP Tue Nov 18 12:19:59 EST 2008(取自/proc/version)  1.三个数据的比较  程序1.1  C代码  int main(void)   {       int i, n;       switch(i){           case 101:               n = 1;               break;           case 102:               n = 2;               break;           case 103:               n = 3;               break;           default:               n = 0;               break;       }   }   得到的汇编码1.1:  汇编代码     .file    "switch.c"       .text   .globl main       .type    main, @function   main:       leal    4(%esp), 
    转载请注明原文地址: https://ibbs.8miu.com/read-2212942.html

    最新回复(0)