[Python-3000] Delayed reference counting idea
Josiah Carlson
jcarlson at uci.edu
Tue Sep 19 18:23:01 CEST 2006
"Marcin 'Qrczak' Kowalczyk" <qrczak at knm.org.pl> wrote:
>
> Brian Quinlan <brian at sweetapp.com> writes:
>
> >> Reference counting is inefficient, doesn't by itself handle cycles,
> >> and is impractical to combine with threads which run in parallel. The
> >> general consensus of modern language implementations is that a tracing
> >> GC is the future.
> >
> > How is reference counting inefficient?
>
> It involves operations every time an object is merely passed around,
> as references to the object are created or destroyed.
Redefine the INC/DECREF macros to assign something like 2**30 as the
reference count in INCREF, and make DECREF do nothing. A write of a
constant should be measurably faster than an increment. Run some
relatively small test program (be concerned about memory!), and compare
the results to see if there is a substantial difference in performance.
> It doesn't move objects in memory, and thus free memory is fragmented.
> Memory allocation can't just chop from from a single area of free memory.
> It can't allocate several objects with the cost of one allocation either.
It can certainly allocate several objects with the cost of one
allocation, but it can't *deallocate* those objects individually. See
the various freelists for examples where this is used successfully in
Python now.
- Josiah
More information about the Python-3000
mailing list