Weil die Funktion leider doch etwas macht
Der String
temp
sorgt dafür, dass eine ganze Reihe an Operationen ausgeführt werden. Außerdem hast du Overhead durch das Stack-Frame, den
CALL
ansich, etc. Leider ist der Delphi Compiler sogar im Release mode so "dumm", dass er diese Anweisungen nicht raus-optimiert.
Der String sollte immer rausfliegen, egal ob Debug oder Release.
Tut er aber leider nicht. Bzw. bleibt der SEH und noch einiges an sonstigem Kram zurück, der definitiv unnötig ist an dieser Stelle.
Und nein, die leere Funktion darf der Compiler eigenmächtig garnicht rauswerfen.
Woher soll er wissen, ob diese Funktion nicht eventuell gehookt wird und dann dort doch etwas gemacht wird?
Wenn die Funktion irgendwo referenziert wird, darf sie nicht wegfliegen. Externe Hooks kann der Compiler aber nicht berücksichtigen. In C/C++ wäre diese Funktion sowas von weg
Da kann man sagen, was man will, der Delphi Compiler optimiert einfach schlecht.