2010-09-28 3 views
6

Existe-t-il des frais supplémentaires d'exécution lors de l'appel de fonctions surchargées?La surcharge de fonctions a-t-elle un temps d'exécution dans Delphi?

(je demande à ce spécifiquement pour Delphi, dans le cas où la réponse est la même pour toutes les langues compilées)

Je ne pense pas que cela devrait être résolu lors de la compilation, mais vous ne pouvez jamais être sûr peux vous ?

Répondre

19

Bien sûr, vous pouvez être sûr, parce que c'est documented. Est le compilateur qui le résout à la compilation, donc il n'y a pas de surcharge supplémentaire sur l'appel de fonctions surchargées dans Delphi.

[Modifier]

J'ai fait un petit test pour vous:

var 
    j: Integer; 
    st: string; 

procedure DoNothing(i: Integer); overload; 
begin 
    j := i; 
end; 

procedure DoNothing(s: string); overload; 
begin 
    st := s; 
end; 

procedure DoNothingI(i: integer); 
begin 
    j := i; 
end; 

procedure TForm2.Button1Click(Sender: TObject); 
const 
    MaxIterations = 10000000; 
var 
    StartTick, EndTick: Cardinal; 
    I: Integer; 
begin 
    StartTick := GetTickCount; 
    for I := 0 to MaxIterations - 1 do 
    DoNothing(I); 
    EndTick := GetTickCount; 
    Label1.Caption := Format('Overlaod ellapsed ticks: %d [j:%d]', [EndTick - StartTick, j]); 
    StartTick := GetTickCount; 
    for I := 0 to MaxIterations - 1 do 
    DoNothingI(I); 
    EndTick := GetTickCount; 
    Label1.Caption := Format('%s'#13'Normal ellapsed ticks: %d [j:%d]', [Label1.Caption, EndTick - StartTick, j]); 
end; 

Résultat: Presque tout le temps 31 Tiques (millisecondes) pour les deux sur ma machine dev, prend parfois la surcharge seulement 16 tiques .

alt text

+2

+1 vous m'avez battu :) –

+0

Droit. Il y a un temps de compilation (négligeable), mais aucun à l'exécution. –

+2

Le code compilé ne se soucie pas du nom mais de l'adresse de la bonne procédure à appeler. Puisque cette adresse de traduction => adresse est faite à la compilation, à la fin, à l'exécution, c'est exactement la même chose que d'avoir des noms différents. –

3

est résolu à Surcharge moment de la compilation (pas de frais généraux), mais primordiale a en tête! virtual est plus rapide que dynamic:

http://docwiki.embarcadero.com/RADStudio/en/Methods

virtuel par rapport dynamique
Dans Delphi pour Win32, les méthodes virtuelles et dynamiques sont sémantiquement équivalentes.
Cependant, ils diffèrent dans la mise en œuvre de la répartition des appels de méthodes au moment de l'exécution: les méthodes virtuelles optimisent la vitesse, tandis que les méthodes dynamiques optimisent la taille du code.

Questions connexes