4 ms·
Even if you're not putting the RString struct on the stack, the embedded string optimization means calling malloc() just once instead of twice.
by metageek 15y ago
Even if you're not putting the RString struct on the stack, the embedded string optimization means calling malloc() just once instead of twice.
- ori_b 15y agoYou 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 */
- teaspoon 15y agoRuby strings are mutable, so you need to be able to free s->data without freeing the RString itself.
- ori_b 15y agos = realloc(s, sizeof(RString));
- charliesome 15y agoMRI objects are not relocatable so that won't work if realloc has to move the structure in memory
- dchest 15y agoNitpick: sizeof(RString) + length may overflow size_t.