GC In Python: YAS (Yet Another Summary)
Markus Kohler
markusk at bidra241.bbn.hp.com
Mon Jun 28 03:58:28 EDT 1999
Andrew Dalke <dalke at bioreason.com> writes:
> Stuart Yeates <syeates at cs.waikato.ac.nz> said to me:
> > I'm not quite sure what you mean by 'integer handle,' but if you
> > do a straight cast then it shouldn't be a problem (since the
> > collector operates on the binaries representation). If you mean
> > that it uses an index to an array of pointers (or some such),
> > then that shouldn't be a problem either, since the pointer still
> > exists somewhere (i.e. the array).
>
> The latter. Example object creation code might look like:
>
> dt_Handle mol = dt_smilin("CCC", 3);
>
> where dt_Handle is a typedef to unsigned long. In the SWIGged
> wrapped version, this is mol = dt_smilin("CCC").
>
> Yes, the library has a pointer table to the object. The problem
> I see is, how does the Boehm collector (or other GC) know what to
> collect from this vendor library? I can't see how, given that
> my Python code stores it as an integer.
As long as you have a pointer to the array it will not be reclaimed by the GC.
The integer doesn't count as a pointer. It wouldn't count in any GC I know.
The Boehm Weiser collector also has special support for interior
pointers, which are pointers into an array.
>
> That's why I don't see how you say "It fully supports C and C++"
> when this is a package which doesn't do "pointer XORing or other
> crimes" but cannot be usable with a GC w/o modifications.
The claim is right. Even in a cooperative environment your integer
wouldn't count as a reference to an object.
>
> But then, I'm a computational biophysicist by training and don't
> know much about GC other than the general concepts. One of the
> references on the SGI page says Boehm can be used in "uncooperative
> environments" so I'll end by saying that I don't know enough.
>
The Boehm collector is a conservative collector, which means it just
scans the memory and if there's an integer that points to a valid
address it wouldn't reclaim the object at this address.
Your integer wouldn't probably be a valid address and therefore
wouldn't be counted by the GC.
Markus
--
Markus Kohler mailto:markus_kohler at hp.com
More information about the Python-list
mailing list