Wie gesagt... bei einer Funktion oder Prozedur:
Delphi-Quellcode:
function Foo(Bar:Integer): Boolean;
asm
end;
Das ist nicht gleich dem:
Delphi-Quellcode:
function Foo(Bar:Integer): Boolean;
begin
asm
end;
end;
Die
OH sagt dazu:
Zitat:
Der Compiler führt für diese Routinen [erstere ^^] verschiedene Optimierungen durch:
- Der Compiler erstellt keinen Code zum Kopieren von Wert-Parametern in lokale Variablen. Dies betrifft alle Wert-Parameter vom Typ String und alle anderen Wert-Parameter, deren Größe nicht ein, zwei oder vier Byte beträgt. Innerhalb der Routine müssen derartige Parameter als var-Parameter behandelt werden.
- Der Compiler weist keine Funktionsergebnis-Variable zu, und eine Referenz auf das Symbol @Result ist ein Fehler. Eine Ausnahme bilden Funktionen, die eine Referenz auf einen String, eine Variante oder ein Interface zurückliefern. Die aufrufende Routine weist diesen Typen immer einen @Result-Zeiger zu.
- Der Compiler generiert nur Stackframes für verschachtelte Routinen, für Routinen mit lokalen Parametern oder für Routinen, die über Parameter im Stack verfügen.
- Locals ist die Größe der lokalen Variablen, Params die Größe der Parameter. Wenn sowohl Locals als auch Params Null ist, existiert kein Eintrittscode, und der Austrittscode besteht nur aus einer RET-Anweisung.
...
Gruß Mr_G