2010-09-28 21 views
6

¿Hay alguna sobrecarga de tiempo de ejecución adicional al llamar a funciones sobrecargadas?¿La función de sobrecarga tiene sobrecarga de tiempo de ejecución en Delphi?

(Lo pregunto específicamente para Delphi, en caso de que la respuesta no es la misma para todos los lenguajes compilados)

yo creo que no lo que deberían ser resueltos durante el tiempo de compilación, pero nunca se puede estar seguro de que puedo ?

Respuesta

19

Por supuesto, puede estar seguro, porque es documented. Es el compilador que lo resuelve en tiempo de compilación, por lo que no hay gastos adicionales en llamar a funciones sobrecargadas en Delphi.

[Editar]

hice una pequeña prueba para usted:

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; 

Resultado: Casi todo el tiempo 31 Garrapatas (milisegundos) para los dos en mi máquina dev, a veces la sobrecarga tarda sólo 16 garrapatas .

alt text

+2

+1 me ganaste :) –

+0

Derecha. Hay una cantidad (insignificante) de sobrecarga en tiempo de compilación, pero ninguna en tiempo de ejecución. –

+2

El código compilado no se preocupa por el nombre, sino por la dirección del procedimiento correcto para llamar. Dado que este nombre de traducción => dirección se realiza en tiempo de compilación, al final, en tiempo de ejecución, es exactamente lo mismo que tener diferentes nombres. –

3

La sobrecarga se resuelven en tiempo de compilación (sin cabeza), pero tiene primordial cabeza! virtual es más rápido que dynamic:

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

virtual dinámico frente
En Delphi para Win32, métodos virtuales y dinámicos son semánticamente equivalentes.
Sin embargo, difieren en la implementación de la distribución de llamadas de método en tiempo de ejecución: los métodos virtuales optimizan la velocidad, mientras que los métodos dinámicos optimizan el tamaño del código.

Cuestiones relacionadas