The switch and if-else statements are both conditions in the C language. In terms of syntax, the two functions are the same. If the switch can be completed, the switch can also be completed, however, their application scenarios are slightly different. If is mostly used in a single branch, switch is mainly used in the case of multiple branches.
Let's take a look at the C program and the Assembly Code Compiled with GCC.
/* $ Begin switch-C */
Int switch_eg (int x)
{
Int result = X;
Switch (x ){
Case 100:
Result * = 13;
Break;
Case 102:
Result + = 10;
/* Fall through */
Case 103:
Result + = 11;
Break;
Case 104:
Case 106:
Result * = result;
Break;
Default:
Result = 0;
}
Return result;
}
/* $ End switch-C */
The Code Compiled with GCC is as follows:
. File "switch. c"
. Versions "01.01"
Gcc2_compiled .:
. Text
. Align 4
. Globl switch_eg
. Type switch_eg, @ Function
Switch_eg:
Pushl % EBP
Movl % ESP, % EBP
Movl 8 (% EBP), % edX
Leal-100 (% EDX), % eax
CMPL, % eax
Ja. A9
JMP *. L10 (, % eax, 4)
. P2align 4, 7
. Section. rodata
. Align 4
. Align 4
. L10:
. Long. L4
. Long. Maid
. Long. l5
. Long. L6
. Long. l8
. Long. Maid
. Long. l8
. Text
. P2align 4, 7
. L4:
Leal (% edX, % edX, 2), % eax
Leal (% edX, % eax, 4), % edX
JMP. l3
. P2align 4, 7
. L5:
Addl, % edX
. L6:
Addl, % edX
JMP. l3
. P2align 4, 7
. L8:
Imull % edX, % edX
JMP. l3
. P2align 4, 7
. A9:
Xorl % edX, % edX
. L3:
Movl % edX, % eax
Movl % EBP, % ESP
Popl % EBP
RET
. Lfe1:
. Size switch_eg,. Lfe1-switch_eg
. Ident "GCC: (GNU) 2.95.3 20010315 (release )"
In the assembly code above, we can clearly see that the switch part is allocated with a continuous query table, and the discontinuous part of the switch case is also added with corresponding entries, the size of the switch table is not based on the number of case statements, but the gap between the minimum and maximum values of case. When you select a branch, a CMP clause exists first. If the value is greater than the maximum value of the query table, the system jumps to the default clause. The time consumed by all other case statements is O (1 ).
It can be seen that the switch efficiency is generally higher than if-Else
The switch is highly efficient and can be seen from the assembly code.
The switch calculates the value only once and then test, JMP,
If... else is calculated for each condition.
Switch efficiency is independent of the number of branches
When only the branches are small, if efficiency is higher than switch (because switch has a jump table)
If there are many branches, switch is required.
Http://www.ccoder.net/C-yuyantigao/C-yuyan/252.html
Http://www.CCoder.net