Hey guys, so I wanted to share this gstring business with you. gstring (gcfreestring) is a string wrapper that uses pointers to mutate the string when performing misc string operations the purpose is to be able to perform most the common operations we do no strings (concat, format, replace, etc) without any allocation. gstring is not meant to be stored as member variables, but to quickly declare them in a 'gstring block', use them for whatever string operation you want, then dispose of them. The nice thing is that you don't have to manually dispose of gstrings, once you're in a block all assignments are registered so that when the block/scope ends all used gstrings are disposed. But what if you wanted to keep/store the result you calculated and not dispose of them? Well this is where 'intern' comes in - basically there's a runtime intern (cache) table of strings (similar to .NET's string const intern table).string str = result.Intern(); Which basically says, if the string is in the intern (cache) table, return it otherwise allocate new memory for it and store it in the table, next time we ask for it, it's there. The nice thing about interning is that you could pre-intern your strings via the static method gstring.Intern NOTES: 1- The class is not designed with concurrency/threading in mind, it's meant to be used in Unity 2- Cultural stuff I did not consider as well 3- Again, you shouldn't have gstring members in your class. All gstring instances are meant to be disposed. You just quickly open up a gstring.Block() and use gstrings in it, if you want to store a result you get back from a gstring operation use Intern 4- You don't need the gmcs and smcs file if you compile to a dll, and use the dll instead. The public API is identical to that of 'string' More details in this video: Attached is gstring with the test seen in the video. Note I just wrote it a couple of days ago so I didn't have time to test it in my game, so there might be bugs. Hope you find it useful! Cheers!