Ответ 1
В документации говорится:
"Использование const позволяет компилятору оптимизировать код для параметров структурированного и строкового типа, а также обеспечивает защиту от непреднамеренной передачи параметра ссылкой на другую процедуру."
В случае строки, например, средство оптимизации означает, что при передаче в качестве константы нет дополнительной пересчеты. Также, как const, не означает копию. Часто он внутренне передается как ссылка, потому что компилятор не обеспечивает доступа к записи.
Некоторые очень интересные статьи, чтобы полностью понять, что происходит под капотом:
http://delphitools.info/2010/07/28/all-hail-the-const-parameters
http://vcldeveloper.com/articles/different-function-parameter-modifiers-in-delphi
Edit:
Простой пример, показывающий, что const может привести к переходу по ссылке внутри:
program Project1;
{$APPTYPE CONSOLE}
type
PMyRecord = ^TMyRecord;
TMyRecord = record
Value1: Cardinal;
Value2: Cardinal;
end;
procedure PassAsConst(const r: TMyRecord);
begin
PMyRecord(@r).Value1 := 3333;
PMyRecord(@r).Value2 := 4444;
end;
procedure PassByVal(r: TMyRecord);
begin
PMyRecord(@r).Value1 := 3333;
PMyRecord(@r).Value2 := 4444;
end;
var
r: TMyRecord;
begin
r.Value1 := 1111;
r.Value2 := 2222;
PassByVal(r);
Writeln(r.Value1);
Writeln(r.Value2);
PassAsConst(r);
Writeln(r.Value1);
Writeln(r.Value2);
Readln;
end.