Hacker News new | past | comments | ask | show | jobs | submit login

Not knowing much C, I was confused about why malloc() wouldn't get called for the RString structure. This is elucidating:

http://www.cs.usfca.edu/~wolber/SoftwareDev/C/CStructs.htm

Particularly this part: "// automatic allocation, all fields placed on stack"




Even if you're not putting the RString struct on the stack, the embedded string optimization means calling malloc() just once instead of twice.


You can allocate the string with one malloc:

    RString *s = malloc(sizeof(RString) + length); /* allocate 'length' bytes extra memory past the end of 's' */
    s->data = s + 1; /* to the extra memory past the start of the string struct */


Ruby strings are mutable, so you need to be able to free s->data without freeing the RString itself.


    s = realloc(s, sizeof(RString));


MRI objects are not relocatable so that won't work if realloc has to move the structure in memory


Nitpick: sizeof(RString) + length may overflow size_t.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: