From owner-freebsd-net@FreeBSD.ORG Fri Oct 31 05:34:56 2014 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 21340D48; Fri, 31 Oct 2014 05:34:56 +0000 (UTC) Received: from mail-pa0-x229.google.com (mail-pa0-x229.google.com [IPv6:2607:f8b0:400e:c03::229]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E6CFD8E1; Fri, 31 Oct 2014 05:34:55 +0000 (UTC) Received: by mail-pa0-f41.google.com with SMTP id rd3so7043371pab.0 for ; Thu, 30 Oct 2014 22:34:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=MJy/EVOZx1NQcRFf+HWvLtY8/s4p5muelZ7emrG6uHE=; b=Ehg48q9VTGH9HGhupXGmz9WC6HhizqTDazeinj5B9F3cI++RpocU+2LCqTTuJ98DjM wW6h4UNwADp6tXpdnHzQzaUhcmLmNOZ2rCKs++Z1YpNjvpFR0rsrqA/F6EJywaun2tZO YF5DgImtD79WVmnywn2IZxiOSu4Yck5U+q4Q3lfGt7C/GM56DSKgwZWCLmmOx22Gu4sD k1xOQxZSHDA9Je2zwrcerTIfsDbR0igZcLiIVsdoMBXupR/XJFGRDfoVCPYyyvkfHc24 asYv8Z4chVFu+T4J44aCL86LQyKVwhk0NxSfFjku1Cf+dVj0ll3bBt8QDPsyFFkoviFl 4WtA== MIME-Version: 1.0 X-Received: by 10.66.159.3 with SMTP id wy3mr22015816pab.98.1414733695494; Thu, 30 Oct 2014 22:34:55 -0700 (PDT) Received: by 10.70.17.228 with HTTP; Thu, 30 Oct 2014 22:34:55 -0700 (PDT) In-Reply-To: <54531E89.3010205@freebsd.org> References: <009101cff386$29c30e50$7d492af0$@gmail.com> <20141030063053.12608314@X220.alogt.com> <54531E89.3010205@freebsd.org> Date: Fri, 31 Oct 2014 13:34:55 +0800 Message-ID: Subject: Re: performance of the swtich/case statements From: bycn82 To: Alfred Perlstein Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.18-1 Cc: FreeBSD Net X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Oct 2014 05:34:56 -0000 actually I just checked that, no performance concern on the switch/case statement already, the compiler will sort the conditions in cases statements ,and since the opcodes are define in an enum, so the compiler will find out that all the conditions are in sequences :) On Fri, Oct 31, 2014 at 1:30 PM, Alfred Perlstein wrote: > 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@alogt.com> wrote: >> >> Hi, >>> >>> On Wed, 29 Oct 2014 22:39:34 +0800 >>> "bycn82" 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@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-net >> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" >> >> > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" >