Messages in this thread | | | Date | Thu, 9 Dec 2004 09:09:30 -0500 (EST) | From | linux-os <> | Subject | Re: doubt about "switch" - default case in af_inet.c |
| |
On Thu, 9 Dec 2004, Phani Kandula wrote:
> Hi all, > > I'm a newbie to the Linux. I'm using 2.6.8 kernel. > In /usr/src/linux/net/ipv4/af_inet.c I came across this... > <code> > switch (sock->state) { > default: > //do something.. > goto out; > case SS_CONNECTED: > //do something.. > goto out; > case SS_CONNECTING: > //do something.. > break; > case SS_UNCONNECTED: > //do something.. > break; > } > </code> > > Is there any advantage in having 'default' as the first case? > My understanding is that it will be useful only when 'default' is the > most likely case (in general). > > Even then, my doubt: How will compiler (say gcc) implement 'default' > as the first value? Program is supposed to see all the cases and then > decide 'default'. Is this correct? > > So, is this the best way to do it? please clarify.. > > Thanks, > Phani
Generally speaking when you see "strange" code mixed with gotos, somebody has adjusted the code, often by looking at the assembly output, to maximize the performance.
Of course, when the compiler changes, the code may no longer be optimum.
In principle, if the labels in a switch represent incrementing numbers, the compiler can generate fast code by using that fact. However, often little care is taken in the placement of these labels or the numerical differences between them so the code output degenerates to a bunch of "compares". In this case, the most common value should be the one checked first.
Cheers, Dick Johnson Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips). Notice : All mail here is now cached for review by John Ashcroft. 98.36% of all statistics are fiction. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |