On Jun 13, 2006, at 11:06 AM, Shane Hathaway wrote:

Interesting.  To me, the distinction between a pointer and a reference
is that a reference not only points to the object referenced but also
has some kind of strong link back to the thing that's referencing it.
That strong link backward is what makes garbage collection possible. In
the C++ code "int foo(int &bar)", the variable bar is just a cleverly
disguised pointer, not a reference in the usage I am accustomed to.

I meant to reply to this earlier, but I just remembered about it.

Actually, back-links are not necessary to implement garbage collection. All that's required is a knowledge at runtime of what pieces of memory are really pointers. This isn't even strictly necessary; there are what's known as conservative garbage collectors that will guess whether a piece of data is a pointer or not based on its bit pattern. This method can be used to retrofit garbage collectors to C or C++ programs, though they will sometimes hold on to small bits of memory that are not really necessary due to pieces of data that happen to look like pointers but are not.

Since the only type information C has at runtime is the byte size of a piece of data, conservative collectors are the only possibility for straight C. Since C++ remains backward compatible with C, there remain pieces of data that are pointers but are not identifiable as such based on runtime information. So, conservative garbage collection is the only method possible in those languages without explicitly designing a new allocation system and using it exclusively (or at least wherever garbage collection is desired).

                --Levi


/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to