![]() |
Delphi-Version: XE2
Frage zur inline Optimierung
Hallo,
die folgenden Codes sollten doch eigentlich von der Laufzeit her nach dem Compilieren im Release Modus mit Optimierung identisch sein, oder nicht?
Delphi-Quellcode:
Sind sie aber leider nicht. p2 ist ungefähr 3x langsamer. Delphi erkennt das Schlüsselwort inline zwar, denn ohne dieses ist p2 ungefähr 10x langsamer.
procedure p1(const s:string);
var i,l:integer; begin i:=1; l:=length(s); while i<=l do begin //... inc(i); end; end; procedure p2(const s:string); function neof(i,l:integer):boolean;inline; begin result:=i<=l; end; var i,l:integer; begin i:=1; l:=length(s); while neof(i,l) do begin //... inc(i); end; end; Aber warum macht der Compiler aus p2 nicht einfach p1? Das verstehe ich gerade nicht. Es muss doch nur das Result beim Funktionsaufruf eingesetzt werden. |
AW: Frage zur inline Optimierung
In while- und repeat-Schleifen in der Bedingung benutzte Funktionen können nicht inline eingebunden werden.
Etwas schneller sollte es übrigens sein, wenn du neof außerhalb deiner Funktion definierst und nicht darin. Dann kann der Compiler oft besser optimieren. |
AW: Frage zur inline Optimierung
Zitat:
Zitat:
|
AW: Frage zur inline Optimierung
Doch, es stimmt, es wird vielleicht besser optimiert, aber nicht wirklich eingebunden. Zumindest in XE2.
Schau halt selbst in den Assemblercode, wenn du es nicht glaubst... |
AW: Frage zur inline Optimierung
Zitat:
Zitat:
Gibt es sonst noch eine andere Möglichkeit? Ich möchte ungerne alle 1-zeiligen Funktionsaufrufe manuell in die Hauptfunktion copy und pasten :x Edit: Bei folgendem Code funktioniert das inlining übrigens perfekt:
Delphi-Quellcode:
Das ist aber natürlich ziemlich unschön...
procedure p3(const s:string);
function eof(i,l:integer):boolean;inline; begin result:=i>l; end; var i,l:integer; begin i:=1; l:=length(s); while true do begin if eof(i,l) then break; //... inc(i); end; end; |
AW: Frage zur inline Optimierung
Kommt es denn in allen Situationen so sehr auf Performance an?
|
AW: Frage zur inline Optimierung
Nicht bei allen, aber in den meisten Situationen schon.
Wäre es nur einige ms (oder meinetwegen auch 2-3 Sekunden) langsamer, könnte ich es verschmerzen, aber von 5 auf 15 Sekunden - das muss nicht unbedingt sein. |
AW: Frage zur inline Optimierung
Zitat:
Warum es nun wirklich genau dort nicht geht, kannst du nur die Entwickler selbst fragen. Es ist jedenfalls dokumentiertes Verhalten des Compilers, also kein Zufall. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz