Zitat von
dizzy:
Mh, find ich nun fast enttäuschend. Dann heisst Inlining dort tatsächlich nur Ersparnis des Calls, bzw. der Vorbereitung der Parameter, und den Optimizer kümmerts nicht?
Nein. Jetzt zum dritten Mal:
Ein "var" Parameter
erzwingt eine Speichervariable. Da ist dann nichts mehr drin mit Registeroptimierung und so. Wenn man also solche Tests macht, dann bitte den einzelnen Testfällen (hier der Prozedur und der Funktion) jeweils ihre
eigenen lokalen Variablen geben.
Delphi-Quellcode:
var
i: Integer;
begin
x(i);
i := y;
end.
So kann es ja nichts mit der Optimierung werden. Denn erstens ist i hier keine lokale Variable (wird also so oder so auf eine Speicherzelle abgebildet) und zweitens wird i für x und y benutzt, wobei x verhindert, das i auf ein Register statt Speicherzelle abgebildet wird.
So ist es besser:
Delphi-Quellcode:
procedure Test;
var
ergx, ergy: Integer;
begin
x(ergx);
ergy := y;
end;
Mit inlining wird "ergy := y" hier total wegoptimiert.