[Python-Dev] Memory leak tracking

Guido van Rossum guido@beopen.com
Wed, 12 Jul 2000 00:50:27 -0500


Barry Warsaw:

> When I compile out gc, I get more leaks in the core, namely in
> exceptions.c.   Turning on gc clears all of these up; e.g. all the
> memory gets freed eventually.  My suspicion therefore is that there
> are a number of cycles created during the initialization of the
> built-in exceptions.

Vladimir Marangozov:

> I think that if we start relaxing our attention w.r.t. refcount policies,
> cyclic refs and the resulting mem leaks _in_the_core_, just because gc
> helps in hiding bad practice, we'll suffer more than you would in the
> attempt to fix these things.

Let me explain something about the new GC code.  It does *not* hide
missed DECREFs.  If you miss a DECREF, the GC code thinks there's a
global pointer to the object that keeps it alive, and will not release
the object.

I don't know what Barry found, but I suspect they are genuine cycles
created during the exception initialization.  It's easy enough to
create cycles, e.g. form module -> class -> function -> module, or
module -> function -> module, when defining classes or functions.

The new GC code is *intended* to clean up exactly such cycles!

--Guido van Rossum (home page: http://dinsdale.python.org/~guido/)