AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionen überladen (Geschwindigkeit)

Ein Thema von Gargamel · begonnen am 4. Feb 2012 · letzter Beitrag vom 4. Feb 2012
Antwort Antwort
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#1

Funktionen überladen (Geschwindigkeit)

  Alt 4. Feb 2012, 11:16
Hi

Ich frage mich, ob es Geschwindigkeitsunterschiede gibt, wenn ich zwei Funktionen überlade oder einfach beide Funktionen anders benenne.
Hier mal ein Beispiel, wo es darum geht, die Länge eines Vektors zu berechnen:

Delphi-Quellcode:
interface

type

Vec3D = record
  x,y,z:real;
end;

Vec2D = record
  x,y:real;
end;

function dwmath_getVecLength3D(vec:Vec3D):real;
function dwmath_getVecLength2D(vec:Vec2D):real;

implementation

function dwmath_getVecLength3D(vec:Vec3D):real;
Begin
  result:=sqrt(vec.x*vec.x + vec.y*vec.y + vec.z * vec.z);
End;

function dwmath_getVecLength2D(vec:Vec2D):real;
Begin
  result:=sqrt(vec.x*vec.x + vec.y*vec.y);
End;
Und hier die Variante, wo die Funktionen einfach überladen werden:

Delphi-Quellcode:
interface

type

Vec3D = record
  x,y,z:real;
end;

Vec2D = record
  x,y:real;
end;

function dwmath_getVecLength(vec:Vec3D):real; overload;
function dwmath_getVecLength(vec:Vec2D):real; overload;

implementation

function dwmath_getVecLength(vec:Vec3D):real;
Begin
  result:=sqrt(vec.x*vec.x + vec.y*vec.y + vec.z * vec.z);
End;

function dwmath_getVecLength(vec:Vec2D):real;
Begin
  result:=sqrt(vec.x*vec.x + vec.y*vec.y);
End;
Bei der Überladerei geht es doch darum, daß der PC anhand der Parameterliste selbst entscheidet, welche der Funktionen zu verwenden ist. Und genau da könnte es ja sein, daß hier Zeit verloren geht. Ich muß allerdings noch mit sagen, daß der Code für die KI eines Computerspiels verwendet werden soll und ich entsprechend auf Performance achten muß.

Was meint Ihr dazu?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Funktionen überladen (Geschwindigkeit)

  Alt 4. Feb 2012, 11:20
Der Compiler entscheidet sich aber nicht erst zur Laufzeit für die entsprechende Variante (wenn Typ zur Zeit der Compillierung bekannt). Deshalb sollte der Performanceverlust nicht so groß sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: Funktionen überladen (Geschwindigkeit)

  Alt 4. Feb 2012, 12:36
Der Compiler entscheidet sich aber nicht erst zur Laufzeit für die entsprechende Variante (wenn Typ zur Zeit der Compillierung bekannt). Deshalb sollte der Performanceverlust nicht so groß sein.
Genau! Es gibt überhaupt keinen Performanceverlust, die die Zuordnung ja bereits beim Compilieren geschieht. Das Überladen von Methoden ist eine syntaktische Eigenschaft, die den Source-Code lesbarer machen soll. Auf die Laufzeit hat sie keine Auswirkungen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#4

AW: Funktionen überladen (Geschwindigkeit)

  Alt 4. Feb 2012, 12:59
Deshalb sollte der Performanceverlust nicht so groß sein.
Bzw. es gibt garkeinen Unterschied,

Egal ob die Funktionen gleich heißen und überladen sind, oder ob sie unterschiedliche Namen haben.
Wie schon erwähnt ist Delphi keine Scriptsprache, welche erst zu laufzeit ausgewertet wird, sondern alles wird direkt vom Compiler entschieden
und in der EXE macht es dann keinen Unterschied mehr.

[edit]
ähhhh.
OK, ich hatte den Tab wohl länger auf, als gedacht, bevor ich antwortete, aber ohne die faule RedBox merkt man ja nix.
Dschuldschung Uwe, wollt dich nicht übersehn.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 4. Feb 2012 um 13:01 Uhr)
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#5

AW: Funktionen überladen (Geschwindigkeit)

  Alt 4. Feb 2012, 17:08
Danke erstmal an alle.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz