Date: Thu, 14 Nov 2002 14:57:39 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: "M. Warner Losh" <imp@bsdimp.com> Cc: sobomax@FreeBSD.ORG, silby@silby.com, njl@FreeBSD.ORG, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: Re: cvs commit: src/bin/sleep sleep.c Message-ID: <200211142257.gAEMvdxX071776@apollo.backplane.com> References: <200211132012.gADKCQxr062768@repoman.freebsd.org> <Pine.BSF.4.44.0211131528010.32919-100000@niwun.pair.com> <20021113204503.GI9006@vega.vega.com> <20021113.215346.90827277.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
I think the real issue is the bloat in libc. printf() eats 20K, basic stdio eats 5K. You get 15K of bloat just with a blank main(), a good chunk of that being malloc() (reasonable in larger programs, ridiculous in tiny programs where you don't care about malloc() efficiency). (static link output) -rwxr-xr-x 1 dillon dillon 52873 Nov 14 14:36 x printf("X\n"); -rwxr-xr-x 1 dillon dillon 21493 Nov 14 14:36 x puts("X"); -rwxr-xr-x 1 dillon dillon 21493 Nov 14 14:36 x puts("X"); -rwxr-xr-x 1 dillon dillon 15109 Nov 14 14:38 x main() -rwxr-xr-x 1 dillon dillon 959 Nov 14 14:55 x _start() / no libc -rwxr-xr-x 1 dillon dillon 959 Nov 14 14:55 x _start() + phk malloc -rwxr-xr-x 1 dillon dillon 13409 Nov 14 14:56 x My zalloc implementation, which I could turn into a poor-man's malloc in 10 seconds (and is used in libstand) eats 1.7K. My *printf() core (pfmt) from DICE, which handles 95% of the capabilities of *printf, is 1.9K. I could adapt the stdio library from DICE to fit in probably less then 2K, assuming one actually referenced every single function. Why not create a mini-libc? No language-aware character conversions, no efficient string or memory functions, no floating point. Just a basic implementation of the core functionality required for stdio, malloc, *printf(), string functions, and system calls (which will simply be borrowed from libc), sufficient for simple binaries. It could be made compatible with our standard includes (structural bloat != code bloat, so who cares). I could whip this up in a day or two. I'm not kidding. I already have most of the necessary pieces from my embedded libraries and DICE libraries. -Matt Matthew Dillon <dillon@backplane.com> : :In message: <20021113204503.GI9006@vega.vega.com> : Maxim Sobolev <sobomax@FreeBSD.org> writes: :: On Wed, Nov 13, 2002 at 03:32:13PM -0500, Mike Silbersack wrote: :: > :: > On Wed, 13 Nov 2002, Nate Lawson wrote: :: > :: > > njl 2002/11/13 12:12:26 PST :: > > :: > > Modified files: :: > > bin/sleep sleep.c :: > > Log: :: > > Remove getopt and strtol dependencies, reducing size of static exe. :: > > Preserve older desired behavior, accept [+-]*[0-9]*\.[0-9]* :: > > Remove a few unnecessary casts. :: > :: > Please don't commit crap like this. While having smaller binaries might :: > be nice, being entered into an obfuscated C contest is not one of the :: > goals of FreeBSD. :: :: I fully agree - HDD space is pretty cheap today, while embedded folks :: should use other means to reduce footprint (e.g crunchgen). Actually :: in the case of crunchgen this commit worsens situation, as the code :: is no longer shared. : :It also makes the dynamic binary larger for the folks that have / and :/usr on the same partition and dynamically link /sbin and /bin. Much :more bang for the buck that these silly micro-optimizations. So this :is a negative thing as far as I'm concerned. :-( : :Warner : To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200211142257.gAEMvdxX071776>