Einzelnen Beitrag anzeigen

Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#25

Re: Delphi und C++

  Alt 15. Okt 2005, 19:59
Zitat:
Zitat:
Verkürzt gesagt:
Bei Inline-Funktionsaufrufen wird der Code der Funktion jedesmal in das Programm eingefügt, und nicht zu einem Unterprogrammaufruf übersetzt.
Das könnte bei vielen sehr kleinen Funtkionen natürlich irgendwie schon ein Vorteil sein. Bei großen Funktionen fällt das dann wahrscheinlich garnicht ins Gewicht. Aber macht das das Programm nicht viel größer, wenn man davon viel Gebrauch macht? *kopfkratz*. Also irgendwie bin ich nicht so sehr überzeugt, dass das jetzt so ein Kick für die Geschwindigkeit ist...
Ob das Programm größer wird, kommt ganz drauf an. Ist die Methode/Funktion groß und wird an vielen Stellen aufgerufen wird die EXE natürlich größer. Sieht die Methode hingegen so aus (pseudocode, hab die delphi syntax schon vergessen):
Code:
inline methode GetNumber(), rückgabewert ganzzahl
begin
gebe die variable number zurück
end
... dann wird der Code überhaupt nicht größer, vielleicht sogar kleiner weil ein einzelner Variablenzugriff aus weniger Assemblerinstruktionen als ein Funktionsaufruf besteht.
Ich inline alle derartigen Funktionen. Wenn ich weiß dass ich die Methode/Funktion nur an einigen wenigen Stellen im Programm aufrufe und sie dort allerdings sehr oft aufgerufen wird, dann inline ich auch wenn etwas mehr Code drinnen steht*.
Im obigen Beispiel zeigt sich der entscheidende Vorteil: Objektorientierte Programmierung mit Get/Set-Methoden völlig ohne Performanceeinbußen!

Zitat:
Also irgendwie bin ich nicht so sehr überzeugt, dass das jetzt so ein Kick für die Geschwindigkeit ist...
Wenn du eine Funktion verdammt oft aufrufst (bei irgendwelchen Berechnungen leicht möglich) sind inline-Funktionen sehr sinnvoll. Kann je nach Code einen ganz schönen Performancevorteil bringen. Ein Funktionsaufruf ist mit einem nicht zu unterschätzenden Aufwand verbunden.
Die CPU muss an eine andere Codstelle springen, viele Register müssen in den RAM geschrieben und beim Rücksprung wieder geladen werden.

*) Zu beachten ist dass der Compiler entscheiden kann, eine Funktion nicht zu inlinen obwohl ich es will. Manche Compiler inlinen auch Funktionen, die ich nicht mit inline angegeben habe. Es kann sogar vorkommen dass der Code an einigen Stellen inline und an anderen normal eingebunden wird!
Lukas
  Mit Zitat antworten Zitat