performance of the swtich/case statements
Alfred Perlstein
alfred at freebsd.org
Fri Oct 31 05:30:56 UTC 2014
Please run compiler with -O2 -S to get the assembly to see what will
actually happen.
thanks,
-Alfred
On 10/29/14 9:24 PM, bycn82 wrote:
> Hi,
> According to my understanding in Java programming, the compiler will
> automatically store the values into a table and jump to the correct one
> according to the value only when the condition values are in running
> number,
>
> for example.
>
> swtich(a){
> case 1: code block 1
> case 2: code block 2
> case 3: code block 3
> case 4: code block 4
> default: code block 5
> }
>
> it will be handled by an array
> 1-->code block 1
> 2-->code block 2
> 3-->code block 3
> 4-->code block 4
> others-->code block 5
>
> so when the value N is greater than or lesser than 1, it will be directly
> jump to the "code block 5"
> otherwise, it will jump to N, because call the cases are nice in running
> numbers,
>
> but when the cases are messy, it will by just like lots of if/else
>
>
> On Thu, Oct 30, 2014 at 6:30 AM, Erich Dollansky <
> erichsfreebsdlist at alogt.com> wrote:
>
>> Hi,
>>
>> On Wed, 29 Oct 2014 22:39:34 +0800
>> "bycn82" <bycn82 at gmail.com> wrote:
>>
>>> It is using the switch/case statement to make the code clear in the
>>>
>>> I am not a C programmer, so I am not clear how the switch/case will be
>>> optimized by the compiler in FreeBSD. But I used to write a compiler
>>> by myself and I use a hash table to handle all the conditions in the
>>> case statements because my compiler don't care about performance!,
>>> But in C it is different, the case statement can only accept "int"
>>> values, so I don't think it will use hash or what , it should be
>>> directly use an array(), So whether it can be optimized it depends on
>>> the conditions in the switch/case statements, and I noticed that the
>>> cases statement in the 2 loops are not arranging the opcode in
>>> running number, so does the compiler smart enough to optimize it?
>>>
>>>
>> I did not check recently. It was already a long, long time ago, that
>> compilers checked the limits and used the values as an index into a
>> table to jump to the code. I hope that this did not get changed.
>>
>> With other words, the order in the code does not matter. The only
>> optimisation the compiler can do, is not to use a table if the
>> statement consists of a low number of entries only.
>>
>> Erich
>>
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
>
More information about the freebsd-net
mailing list