[PATCH 2/2] first stab at NOFORK applet support
Rob Landley
rob at landley.net
Tue May 9 04:20:14 UTC 2006
On Saturday 06 May 2006 1:29 am, Denis Vlasenko wrote:
> Consolidating globals consists of consolidating bss and consolidating data.
> Data consolidation is done exactly like bss (that is, all data variables
> are to be put into a structure) with the addition of one
> memcpy(data_buffer, data_template, sizeof(struct DATA))
I just did a cleanup on sed.c, moving all its globals and statics into a
single global structure called "bbg" (busybox globals). (I left out the
"static const" strings, since they're read-only data which doesn't count for
this purpose. They might as well be #defines...)
On the whole, the optimizer treated the structure members about the same way
it treated the statics. I ran bloatcheck between each variable I moved into
the structure, and 90% of the time it made no difference. There were a few
points where it added a couple extra instructions, but also a few cases where
it shrank when I converted.
On the whole sed wound up a total of 17 bytes bigger after I'd moved
everything into the structure, and 10 bytes of that was me having to manually
initialize a value since everything in the structure starts at 0 now. Which
was annoying but within the noise, and I suspect the initalization just moved
from a bit where bloatcheck can't see it to where it can, since I shrank a
couple strings and that didn't affect bloatcheck's results, which means nm
isn't outputting preinitialized data...
I did a couple other small cleanups anyway to bring the size down about 30
bytes, just to feel better about it. And I played with the assembly dumps a
bit to see what it was doing, and the changes were all places where the
optimizer had put the code through a blender.
Anyway: Dennis. There's an example of an app with its globals in a structure,
and although the gcc 4.0 optimizer isn't perfect it at least isn't doing
anything actively stupid. (Considering how much work they put into
optimizing c++, I suspected that would be the case.)
If we want sed to be reentrant, we can memset the structure and live should be
good modulo resource leaks (memory, open files, etc) which I think
FEATURE_CLEAN_UP is properly handling right now but it may need a tweak.
What do you think?
Rob
--
Never bet against the cheap plastic solution.
More information about the busybox
mailing list