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),