In article <1140968746.321377.18843.nullmailer / x31.priv.netlab.jp>, Yukihiro Matsumoto <matz / ruby-lang.org> writes: > Since all symbol values have their second LSB set, they should not > conflict with ordinary object values on an aligned memory allocator. It's true in VALUE space but not in object_id space. 32-bit VALUE space: VALUE MSB ------------------------ LSB false 00000000000000000000000000000000 true 00000000000000000000000000000010 nil 00000000000000000000000000000100 undef 00000000000000000000000000000110 symbol ssssssssssssssssssssssss00001110 object oooooooooooooooooooooooooooooo00 rb_obj_id generates an integer in different way between symbols and objects. integer LSB|FIXNUM_FLAG symbol ssssssssssssssssssssssss00001110|1 LONG2NUM((long)obj) object oooooooooooooooooooooooooooooo0|1 (VALUE)((long)obj|FIXNUM_FLAG) # I ignore bignum case. If ssssssssssssssssssssssss is 0xxxxxxxxxxxxxxxxxxxxxxx and oooooooooooooooooooooooooooooo is xxxxxxxxxxxxxxxxxxxxxxx0000111, they will be equal. -- Tanaka Akira