Ich hab jetzt folgendes kleines testprogramm geschrieben
Delphi-Quellcode:
procedure h(a: integer);
begin
ShowMessage(IntToStr(a));
end;
procedure a(
{const/var/nix}j: integer);
assembler;
asm
push eax
call h
pop eax
end;
folgende Aufrufe brachten die ergebnisse (bei parameter 123):
- Header: nix
Ergebnis: 123
- Header: const
Ergebnis: 123
- Header: var
Ergebnis: Speicheradresse
Daraus schließe (ich zumindest), dass der Const-parameter also nur dem compiler sagt, dass dieser wert nie verändert werden wird, aber im eigentlichen bei der parameterübergabe kein unterschied liegt (zwischen const und nix). bei var wird hingegen klarerweise die adresse mitgegeben.
Es kann aber auch gut sein, dass der const-parameter durch den compiler optimiert wird, dass bei Datentypen > Pointer der Zeiger darauf mitgegeben wird, nachdem der wert sowieso nicht veränder wird.