[Gc] Determining if an object is valid

Henning Makholm makholm at octoshape.com
Thu Aug 30 03:18:08 PDT 2012


On 2012-08-29 15:35, Hans Aberg wrote:

> Is there an inexpensive way to determine if an object is still valid? Using
> GC_is_heap_ptr(), a C++ object on the function stack can be marked so that
> it moves to the heap when its scope expires. But if all references to it
> are dead, this is unnecessary. There seems no simple way to determine this,
> though.

1. The only way to figure out with certainty if an object is still live is to
    do a full marking phase, which is rather expensive. If you have local scopes
    with such objects opening and closing often, an average one wouldn't even
    live long enough for a GC to take place, in which case EVERY heap object
    ever used during its lifetime would still count as live.

2. You'd need to use some kind of special mechanism to track the objects that
    point to your stack object such that you can rewrite them when you move the
    stack object -- without this tracking mechanism itself keeping the referring
    objects alive at a GC. The GC does support various finalizer tricks that can
    be used for this, but since they need heap allocation, they would almost
    surely be just as expensive as just heap-allocating your "stack" object from
    the beginning.

-- 
Henning Makholm
Octoshape ApS



More information about the Gc mailing list