Ich dachte, mit inline kann man Funktionen beschleunigen, die sehr oft aufgerufen werden?
Bei einem normalen Funktionsaufruf werden die Parameter auf dem Stack übergeben und ein echter Aufruf ausgeführt. Ist eine Methode als inline deklariert, fügt der Compiler den Code aus der Methode bei jedem Aufruf direkt an der Stelle ein, an der die Funktion aufgerufen wird. Es ist faktisch dasselbe als wenn man selbst die Funktion jedesmal an die Aufrufstelle kopiert.
Delphi-Quellcode:
procedure Step(var A, B: Integer); inline;
begin
Inc(A);
Inc(B);
end;
var
I, J, N: Integer;
begin
I := 0;
J := I + 1;
for N := 1 to 10 do
Step(I, J);
end;
Ist also vom Compilat her identisch mit
Delphi-Quellcode:
var
I, J, N: Integer;
begin
I := 0;
J := I + 1;
for N := 1 to 10 do begin
Inc(I);
Inc(J);
end;
end;
Natürlich ist das schneller als der Funktionsaufruf ohne inline, da einige zusätzliche Befehle eingespart werden. Man kann also mit inline einen Funktionsaufruf schneller machen, aber nur wenn tatsächlich ein Aufruf stattfindet.