高效的C编程之:Switch语句(上)

来源:本站
导读:目前正在解读《高效的C编程之:Switch语句(上)》的相关信息,《高效的C编程之:Switch语句(上)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《高效的C编程之:Switch语句(上)》的详细说明。
简介:编译器通常将C语言中的Switch语句编译一个查找表(Table Lookup)以便跳转到合适的入口处。(EEFOCUS)

14.6Switch语句

编译器通常将C语言中的Switch语句编译一个查找表(TableLookup)以便跳转到合适的入口处。

下面的例子显示了编译器如何处理程序中的Switch语言的。

C源程序如下。

char*ConditionStr1(intcondition)

{

switch(condition)

{

case0:return"EQ";

case1:return"NE";

case2:return"CS";

case3:return"CC";

case4:return"MI";

case5:return"PL";

case6:return"VS";

case7:return"VC";

case8:return"HI";

case9:return"LS";

case10:return"GE";

case11:return"LT";

case12:return"GT";

case13:return"LE";

case14:return"";

default:return0;

}

}

编译后的结果如下。

ConditionStr1:

0000807CE1A01000MOVr1,r0

>>>SWITCH#3switch(condition)

00008080E351000ECMPr1,#0xe

00008084908FF101ADDLSpc,pc,r1,LSL#2

00008088EA00003BB0x817c<SWITCH#20>

0000808CEA00000DB0x80c8<SWITCH#5>

00008090EA00000FB0x80d4<SWITCH#6>

00008094EA000011B0x80e0<SWITCH#7>

00008098EA000013B0x80ec<SWITCH#8>

0000809CEA000015B0x80f8<SWITCH#9>

000080A0EA000017B0x8104<SWITCH#10>

000080A4EA000019B0x8110<SWITCH#11>

000080A8EA00001BB0x811c<SWITCH#12>

000080ACEA00001DB0x8128<SWITCH#13>

000080B0EA00001FB0x8134<SWITCH#14>

000080B4EA000021B0x8140<SWITCH#15>

000080B8EA000023B0x814c<SWITCH#16>

000080BCEA000025B0x8158<SWITCH#17>

000080C0EA000027B0x8164<SWITCH#18>

000080C4EA000029B0x8170<SWITCH#19>

对于ARM代码,查找表的入口为4字节;Thumb代码的查找表入口为1或2个字节(当Case情况小于32时,使用入口为1字节的查找表)。所以当使用Switch语句时,应尽量较少Case分支。

另外,为了提高系统性能,也可以手工编写代码,形成程序跳转来避免使用Switch语句。

下面的例子显示对上面Switch分支语句的改写。

char*ConditionStr2(intcondition)

{

if((unsigned)condition>=15)return0;

return

"EQNECSCCMIPLVSVCHILSGELTGTLE"+

3*condition;

}

提醒:《高效的C编程之:Switch语句(上)》最后刷新时间 2024-03-14 01:07:25,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《高效的C编程之:Switch语句(上)》该内容的真实性请自行鉴别。