Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inline-Funktionen und der Delphi-Compiler... (https://www.delphipraxis.net/102870-inline-funktionen-und-der-delphi-compiler.html)

OldGrumpy 6. Nov 2007 11:24


Inline-Funktionen und der Delphi-Compiler...
 
Hallo zusammen,

ich hab kürzlich gelesen, dass der Delphi-Compiler sehr wählerisch sei, was Inline-Funktionen angeht. Mit anderen Worten, man kann sehr wohl die Inline-Direktive benutzen, der Compiler lässt sich aber nicht zum Inlinen zwingen. Wenn nun also der Berg nicht zum Propheten kommt... :mrgreen:

Lange Rede, kurzer Sinn: Weiss jemand, welche Bedingungen eine Funktion erfüllen muss, damit sie vom Compiler auch als Inline akzeptiert wird? Der Compiler wird ja nicht gerade würfeln ;)

Bernhard Geyer 6. Nov 2007 13:57

Re: Inline-Funktionen und der Delphi-Compiler...
 
In der uses-Anweisung müssen alles Units aufgeführt sein für die Funktionen die "geinlined" werden.
Wird aber auch als Warnung angezeigt falls das nicht der Fall ist.

shmia 6. Nov 2007 14:02

Re: Inline-Funktionen und der Delphi-Compiler...
 
Könnte mir gut vorstellen, dass das von der Anzahl der benötigten Register abhängt.
Wenn die Inline-Funktion z.B. zwei Register benötigt aber im aufrufenden Kontext schon alle X86 Register
benützt werden, wird sich der Compiler wohl dafür entscheiden die Funktion nicht inline zu kompilieren.
Der X86 Befehlssatz hat leider viel zu wenig Register.
Alternativ könnte der Compiler ja PUSH und POP einfügen, aber das ist viel komplizierter als ein normaler
Funktionsaufruf.

Wenn die Inline-Funktion nur ein Register (EAX) benötigt, gibt es wahrscheinlich kein Problem,
da ja mit EAX ständig gearbeitet wird.
Die Inlinefunktion sollte also keine lokalen Variablen benutzen und höchstens einen Übergabeparameter haben,
damit nur ein Register benützt werden muss.

Das sind hier nur Vermutungen, aber ich denke dass sie zutreffen.

geofranz01 6. Nov 2007 15:11

Re: Inline-Funktionen und der Delphi-Compiler...
 
IMHO prüft der Compiler ob es einen Zeitvorteil bringt (zeitkritische Anwendung). Falls nicht streicht er die inline-Funktion und ruft sie normal auf.

Gruß

grenzgaenger 6. Nov 2007 22:51

Re: Inline-Funktionen und der Delphi-Compiler...
 
ab und an hilft auch mal die OH weiter ... :-) . in diesem falle sogar sehr gut (zumindest für D2006)


Hilfekenntwort: Inline-Direktive

<HTH>


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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