Related articles |
---|
Compile Time Garbage Collection impossible? the.real.doctor.zoidberg@gmail.com (2006-09-22) |
Re: Compile Time Garbage Collection impossible? pjb@informatimago.com (Pascal Bourguignon) (2006-09-25) |
Re: Compile Time Garbage Collection impossible? dido@imperium.ph (Rafael 'Dido' Sevilla) (2006-09-25) |
Re: Compile Time Garbage Collection impossible? kym@ukato.freeshell.org (russell kym horsell) (2006-09-25) |
Re: Compile Time Garbage Collection impossible? paul.biggar@gmail.com (Paul Biggar) (2006-09-25) |
Re: Compile Time Garbage Collection impossible? firefly@diku.dk (Peter \Firefly\Lund) (2006-09-25) |
Re: Compile Time Garbage Collection impossible? gneuner2@comcast.net (George Neuner) (2006-09-25) |
Re: Compile Time Garbage Collection impossible? liekweg@ipd.info.uni-karlsruhe.de (Florian Liekweg) (2006-09-25) |
Re: Compile Time Garbage Collection impossible? gah@ugcs.caltech.edu (glen herrmannsfeldt) (2006-09-25) |
Re: Compile Time Garbage Collection impossible? torbenm@app-0.diku.dk (2006-09-25) |
[10 later articles] |
From: | russell kym horsell <kym@ukato.freeshell.org> |
Newsgroups: | comp.compilers |
Date: | 25 Sep 2006 01:13:41 -0400 |
Organization: | Central Iowa (Model) Railroad, Plano, TX, USA |
References: | 06-09-119 |
Keywords: | GC |
Posted-Date: | 25 Sep 2006 01:13:41 EDT |
the.real.doctor.zoidberg@gmail.com wrote:
> Why isn't Compile-Time-Garbage-Collection feasible?
[...]
Obviously, it is. But equally obviously, it isn't complete. :)
It's quite possible for a compiler to maintain a reference count for
heap-allocated objects. When *the compiler can tell* the count reaches
zero (say at the end of blocks) it's possible to plant a "free()".
But down to things like the halting problem, it's impossible to have
this cover all cases. At some point any automatic system (even your
head :) will not be able to decide -- is this garbage now, or not?
On such occasions it's traditional to put the reference count INTO the
object, and use a decr and test. And this, too, could be planted by a
compiler.
But we again come to problems of decidability -- it would not be
possible to have such automatically-planted decr-and-test maintain the
smallest heap possible or remove garbage as soon as possible, etc.
I know Prolog (based on an abstract machine) goes to what I'd call
extra-ordinary lengths to maintain a small amount of memory usage.
Most of this is via objects allocated on a stack.
But the system also tries to decide whether objects *should* be
allocated on a stack or heap, or whether it can speculatively allocate
on a stack and later -- if it needs to -- plant a test that may copy
it to the heap (when it determines at least 1 more ref to the object
has been screated in the meantime).
The strategy usually also needs the help of a periodic
garbage-collection on heap objects.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.