Ohne sonstige Angaben ist es ein Call By Value, d.h. es wird eine Kopie des Strings erstellt und übergeben. Mit einer Angabe (const, var, out) ist es ein Call By Reference, d.h. intern wird ein Zeiger auf die Originaldaten übergeben, ohne erst eine Kopie anlegen zu müssen.
Wobei Strings, dynamische Arrays und Interfaces über eine Referenzzählung verfügen, so daß dort nicht gleich "alles" umkopiert wird.
Auch bei nativen Typen unter SizeOf(Pointer), gibt const keinerlei Vorteile, also in
Win32 bis 32 Bit, wie z.B. Byte, Integer, Pointer, Char usw.