Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Switch() { case: } performance in C [duplicate]

Possible Duplicate:
Why Switch/Case and not If/Else If?

I would like to understand how a switch() case: statement in C is translated by the compiler into assembler opcodes.

Specifically, i'm interested in understanding the difference with a serie of if then else branches.

Performance comparison is the main topic.

A few words on vocabulary : i'm familiar with assembler main concepts, having coded in assembler a long time ago for simpler systems, But certainly do not now anything about x86 assembler semantic. So a direct assembler output will not be useful. Pseudo-code is much prefered.

like image 703
Cyan Avatar asked Sep 21 '12 12:09

Cyan


1 Answers

The compiler can decide to implement it as the equivalent series of if/else if statements, or it may decide to optimize it using a branch table. This depends on several parameters such as the number of branches and the size of minimum range that includes all values you check against.

Update: I remember reading somewhere that typically compilers do not bother to create a branch table unless there are at least 4 switch cases or more; Stephane Rouberol's informative comment below specifically documents how this threshold can be configured for GCC.

like image 99
Jon Avatar answered Oct 21 '22 14:10

Jon