![]() |
Funktionen überladen (Geschwindigkeit)
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:
Und hier die Variante, wo die Funktionen einfach überladen werden:
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;
Delphi-Quellcode:
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ß.
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; Was meint Ihr dazu? |
AW: Funktionen überladen (Geschwindigkeit)
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.
|
AW: Funktionen überladen (Geschwindigkeit)
Zitat:
|
AW: Funktionen überladen (Geschwindigkeit)
Zitat:
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. :shock: Dschuldschung Uwe, wollt dich nicht übersehn. |
AW: Funktionen überladen (Geschwindigkeit)
Danke erstmal an alle.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 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