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