Yeah I thought about doing that, I just think that isn't very efficient, but it would definitively work... I would rather have the block size be dynamic :/...
I did just have an idea though. If I had a header before each string that said the string length, and if the string was viable to use jumping from one header to another would be easy then... And reconstruct the rope by iterating over the old one... Seems inefficient still, taking up a lot of memory over time as there could be a lot of strings, so a lot of headers.
Think on the scale of textbook or long novels, where each each word is a separate node. Someone can add to that word, I'll probably move that node's address at the end of the arena, then there's fragmentation... Should I do a memory copy to close the gap? If they remove the string or lessen it, then memory copy again? Or do I just leave the gap? I could do as you said, have uniform sizes for allocated blocks for each string with no header... Then of course what if a string becomes larger than that size.
I'm not sure if anyone knew any clever tricks to this problem, I'm sure people have encountered it on their projects on handmade network.