From: William Djaja Tjokroaminata Date: 2002-10-23T00:57:18+09:00 Subject: Re: rb_gc_register_address problem Uuups, sorry, reading too fast; in C the precedence is rather different: rb_gc_mark(*list->varptr); /* '->' is stronger than '*' */ So in fact, at the end Matz is giving back *(&VALUE), which is the same as VALUE. So forget about the O(N**2) process. It seems that you (Paul) are correct, that we can have either VALUE or VALUE*. And based on your example (I don't know about other cases) it seems that rb_gc_register_address is better off using VALUE instead of VALUE*. Using VALUE, this is still valid: a = Qnil; rb_gc_register_address(a); rb_gc_unregister_address(a); /* optional */ a = rb_ary_new(); rb_gc_register_address(a); Using VALUE*, on the other hand, we just save some typing: a = Qnil; rb_gc_register_address(&a); a = rb_ary_new(); /* no need for another rb_gc_register_address (&a) here */ Regards, Bill