From owner-freebsd-net@FreeBSD.ORG Fri Oct 31 05:30:56 2014 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id D2919B0F for ; Fri, 31 Oct 2014 05:30:56 +0000 (UTC) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.freebsd.org (Postfix) with ESMTP id BEB50832 for ; Fri, 31 Oct 2014 05:30:56 +0000 (UTC) Received: from u10-2-32-011.office.norse-data.com (unknown [50.204.88.51]) by elvis.mu.org (Postfix) with ESMTPSA id 3EA1E341F854 for ; Thu, 30 Oct 2014 22:30:50 -0700 (PDT) Message-ID: <54531E89.3010205@freebsd.org> Date: Thu, 30 Oct 2014 22:30:49 -0700 From: Alfred Perlstein Organization: FreeBSD User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: freebsd-net@freebsd.org Subject: Re: performance of the swtich/case statements References: <009101cff386$29c30e50$7d492af0$@gmail.com> <20141030063053.12608314@X220.alogt.com> In-Reply-To: Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit 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:30:56 -0000 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" >