Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030435AbVKIWMm (ORCPT ); Wed, 9 Nov 2005 17:12:42 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1030436AbVKIWMm (ORCPT ); Wed, 9 Nov 2005 17:12:42 -0500 Received: from mail28.sea5.speakeasy.net ([69.17.117.30]:47528 "EHLO mail28.sea5.speakeasy.net") by vger.kernel.org with ESMTP id S1030435AbVKIWMk (ORCPT ); Wed, 9 Nov 2005 17:12:40 -0500 Date: Wed, 9 Nov 2005 14:12:38 -0800 (PST) From: Vadim Lobanov To: "linux-os \\(Dick Johnson\\)" cc: linas , "J.A. Magallon" , Kyle Moffett , Douglas McNaught , Steven Rostedt , linux-kernel@vger.kernel.org, bluesmoke-devel@lists.sourceforge.net, linux-pci@atrey.karlin.mff.cuni.cz, linuxppc64-dev@ozlabs.org Subject: Re: typedefs and structs In-Reply-To: Message-ID: References: <20051107204136.GG19593@austin.ibm.com> <1131412273.14381.142.camel@localhost.localdomain> <20051108232327.GA19593@austin.ibm.com> <20051109003048.GK19593@austin.ibm.com> <20051109004808.GM19593@austin.ibm.com> <19255C96-8B64-4615-A3A7-9E5A850DE398@mac.com> <20051109111640.757f399a@werewolf.auna.net> <20051109192028.GP19593@austin.ibm.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1977 Lines: 60 On Wed, 9 Nov 2005, linux-os \(Dick Johnson\) wrote: > > On Wed, 9 Nov 2005, linas wrote: > > > On Wed, Nov 09, 2005 at 08:22:15AM -0800, Vadim Lobanov was heard to remark: > >> On Wed, 9 Nov 2005, J.A. Magallon wrote: > >> > >>> void do_some_stuff(T& arg1,T& arg2) > >> > >> A diligent C programmer would write this as follows: > >> void do_some_stuff (struct T * a, struct T * b); > >> So I don't see C++ winning at all here. > > > > I guess the real point that I'd wanted to make, and seems > > to have gotten lost, was that by avoiding using pointers, > > you end up designing code in a very different way, and you > > can find out that often/usually, you don't need structs > > filled with a zoo of pointers. > > > > But you can't avoid pointers unless you make your entire > program have global scope. That may be great for performance, > but a killer if for have any bugs. Just to extract some useful technical knowledge from the current ongoing "flamewar"... I'm not entirely sure if the above statement regarding performance is correct. Some enlightenment would be appreciated. Suppose you have the following code: int myvar; void foo (void) { printf("%d\n", myvar); bar(); printf("%d\n", myvar); } If bar is declared in _another_ file as void bar (void); then I believe the compiler has to reread the global 'myvar' from memory for the second printf(). However, if the code is as follows: void foo (void) { int myvar = 0; printf("%d\n", myvar); bar(&myvar); printf("%d\n", myvar); } If bar is declared in _another_ file as void bar (const int * var); then I think the compiler can validly cache the value of 'myvar' for the second printf without re-reading it. Correct/incorrect? -Vadim Lobanov - 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/