Just another little wrinkle to add in as this is a mostly academic exercise.

When catenating strings you will be creating copies (expressions on internal stacks, temporary copies for assigning).

This means that unless you are very careful the limitation (memory/machine stability) will not be the string size, but the total size of the string(s) in the expression and the temporary copies.

It also means that KiXtart may be able to handle different string sizes, depending on what you are doing with them.