How can a preprocessor (macro compiler) help here, when it runs at compile time, while time question was clearly about runtime storing of strings (mentioning New and block moves etc.)?
I assumed that the strings were being stored at runtime because storing them end-to-end at compile time was too tedious. If there is a static set of strings, then the Pascal Macro Compiler can store them without any wasted space. If additional strings need to be added to that set at runtime, it is easy to write a procedure to append them to the character array so that all of the strings are accessed the same way. This avoids the use of the New procedure, except if you use it for handling array overflow.
I don't know the internals of the GPC New procedure, but in various environments where I have worked in the past there was no guarantee that successive calls to New would allocate adjacent blocks of storage, hence no guarantee that there would be no gaps or wasted space. It all depended on what sequence of calls to New and Dispose had occurred earlier.
Frank Rubin