Hacker News new | ask | show | jobs
by alecdbrooks 4566 days ago
That's what it is doing. The additional RString structure associates the label "str2" with the characters (on the heap) allocated for the original string.

Ruby experts can correct me if I'm wrong, but when Ruby sees a name like "str2" it looks it up in a table, which points it to the RString structure. From there, it can follow the pointer to the actual array of characters, which in this case is only stored once.

1 comments

According to the article both str and str2 will point to the same char[] on the heap, but they are represented by two different RString objects. As you said when you want to access str and str2 you need to look them up in a table. So why not have both entries on the table point to the same RString, instead of pointing to two different RString's that point to the same char[]?
I'm sorry, I misunderstood your question. Apparently what you describe is actually the case, as the link posted by danieldk below describes.