Even if you're not putting the RString struct on the stack, the embedded string optimization means calling malloc() just once instead of twice.
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 */ s = realloc(s, sizeof(RString));