s := 'Teste'; b := s; // b recebe o ponteiro de 's'e o RefCount e incrementado. s[1] := 'X'; // Faz uma copia de 'b' com o primeiro byte modificado e //decrementa o RefCount de 'b'.Vamos detalhar o trabalho realizado pelo Delphi em cada uma das linhas ilustrando as estruturas em memoria.Step 1) s := 'Teste';E feito a alocacao de memoria para armazena a string. O campo "Lenght" e setado para 5 (que e o numero de caracteres da string) e o campo "RefCount" e setado para 1.A variavel 's' passa a apontar para o inicio da string.Step 2) b := s;Observe que a linha de codigo acima simplesmente copiou o ponteiro da variavel 's' para a variavel 'b' e incrementou o campo 'RefCount', ou seja, abas as variaveis estao apontando para a mesma area de memoria.Step 3) s[1] := 'X';Aqui a alteracao de um simples byte resultou e varias instrucoes.Pelo fato do "RefCount" ser superior a 1, ou seja, por haver mais do que uma referencia, foi realizada a alocacao de uma nova string; copiado o conteudo da string original; setado 1 para o "RefCount"; alterado o primeiro byte para 'X'; atribuido o ponteiro da nova string para a variavel 's'.Por ultimo, o 'RefCount' da string original e decrementado.Otimizacoes no uso de stringsUso de parametros do tipo constA plavrava reservada "const" e um modificador usado para definir algo como estatico, que nao muda. E quando associadas com parametros do tipo string, ha um incremento no desempenho que pode ser perceptivel, dependendo da intensidade de uso.Vamos tomar como base uma funcao simples.function GetStrSize(s: string): Integer;begin Result := Length(s);end;;Aqui o parametro "s" ira incondicionalmente incrementar o campo "RefCount" da string a qual ele esta referenciando antes de iniciar a execucao da primeira linha de codigo da funcao.Pode parecer um tarefa simples e pouco honerosa para o sistema, mas e totalmente desnecessaria porque o parametro e somente utilizado para leitura e nunca para escrita.Uma codigo fonte mais eficiente, nesse caso, e facilmente obtido apenas especificando o parametro como "constante".function GetStrSize2(const s: string): Integer;begin Result := Length(s);end;A boa noticia e que as otimizacoes implementada nos compiladores mais recentes ja detectam esse tipo de situacao e geram um codigo final mais eficiente.Evitando retorno do tipo stringQuando voce for codificar uma funcao na qual e pretendido retornar uma string modificada da que e passada por parametro, e aconselhado que seja feito atraves do proprio parametro. A menos, e claro, que voce necessite do valor original.function AddChar(const s: string): string;begin Result := s + '*';end;O exemplo acima, como pode ser notado, apenas acrescenta um caracter no final da string passa por parametro.Ja a funcao abaixo faz a mesma coisa, mas retorna a nova string atraves do proprio parametro.procedure AddChar2(var s: string);begin s := s + '*';end;Tanto o modificador "const" da primeira funcao quanto o modificador "var" da segunda funcao fazem com que nao seja necessario o incremento do "RefCount". Entretanto a segunda funcao e mais eficiente porque nao requer que a string do parametro seja duplicada, porque a concatenacao e feita diretamente na string original.Postergando condicionais de