It might be worth considering only allocating strings of a capacity that is a power of two (including header) to reduce memory fragmentations:
A simple code snippet to round up to the next power of two:
unsigned int v; // compute the next highest power of 2 of 32-bit v
--v;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
++v;
I can make the code contribution if you'd like.