On Mon, Aug 15, 2005 at 10:44:51AM -0700, Nathan Froyd wrote:
> Reduce core file size by 600k+:
> * Disable FORMAT-with-constant-format-string transform in the
> cross compiler--eliminates many large LAMBDAs from the core;
> * Remove call to PURIFY at the beginning of warm init so that
> cold-init-only stuff doesn't get moved to read-only space
> before it is uninterned and (not) garbage collected.
This is not quite the case, depending on which platform of SBCL you use.
What removing the call to PURIFY *does* do is eliminate the creation of
a second, spurious COMPACT-INFO-ENV, which accounts for the space savings.
How does it do this? The ENVIRONMENT-NAME argument in PURIFY is
"Auxiliary", whereas the ENVIRONMENT-NAME argument in SAVE-LISP-AND-DIE is
"auxiliary". Note the small change in spelling. Ergo, when the call
to PURIFY at the beginning of warm-init was present, it created a
COMPACT-INFO-ENV and the final SAVE-LISP-AND-DIE call created a different
On non-x86 processors, the cold-init-only functions *are* excised from
the target image. On x86 processors, however, said functions continue
to live on, since, AIUI, functions on the x86 contain a pointer to
themselves--at least that's what SB-VM::LIST-REFERENCING-OBJECTS says.
However, there are no other references to them and it would seem to me
that a self-reference would not be enough to inhibit garbage collection
of the function. But that seems to be what's happening...
Nathan | From Man's effeminate slackness it begins. --Paradise Lost
The last good thing written in C was Franz Schubert's Symphony Number 9.