Date: Sat, 13 Jul 2002 17:47:55 +0200 From: Ingo Oeser <ingo.oeser@informatik.tu-chemnitz.de> To: "Brian T.Schellenberger" <bts@babbleon.org> Cc: Yar Tikhiy <yar@comp.chem.msu.su>, hackers@FreeBSD.ORG Subject: Re: Large variables on stack Message-ID: <20020713174755.E758@nightmaster.csn.tu-chemnitz.de> In-Reply-To: <20020712155951.B4F0BBA05@i8k.babbleon.org>; from bts@babbleon.org on Fri, Jul 12, 2002 at 11:59:51AM -0400 References: <20020712194809.A62768@comp.chem.msu.su> <20020712155951.B4F0BBA05@i8k.babbleon.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, On Fri, Jul 12, 2002 at 11:59:51AM -0400, Brian T.Schellenberger wrote: > Besides, stack allocations are more efficient than heap allocations on every > architecture I know of other than the IBM mainframe. > > Of course, it's is a lot better to dynamically allocate strings of unknown > length than to use large stack buffers, but that's because the dynamic > allocation can be done after you know the length of the string and can avoid > overflows more than because you don't want large stack allocations. You can always do strlen() before and pass that on to your subfunctions. I also like the approach of storing strings together with its length, but is is very un-C. > In a language like ForTran that allows variable-length > automatically-allocated function-scoped items I'd do even those > off of the stack. C99 is also such a language and at least GCC supports it just fine even in scopes. The following (useless) programs demonstrates this: #include <stdlib.h> #include <stdio.h> void print_arg(char *s) { size_t len=strlen(s)+1; { char d[len]; memcpy(&d[0],s,len); printf("%s\n",&d[0]); } } int main(int argc, char **argv) { int i; for (i=0; i<argc; i++) if (argv[i]) print_arg(argv[i]); return 0; } Regards Ingo Oeser -- Science is what we can tell a computer. Art is everything else. --- D.E.Knuth To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020713174755.E758>