Jacob,

Correct. The symbol table holds pointers to C strings and new String
objects are created with each call to Symbol#to_s.

I should note that Symbols are native ruby access to the ruby runtime
ID type. It's this reason that C strings are stored in the symbol
table, because the C functions for using ID's (rb_intern and
rb_id2name) use/return char * and ID.