Ver Mensaje Individual
  #10  
Antiguo 06-06-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Reputación: 22
Mick Va por buen camino
Un programa en delphi se ejecuta "tan pelado" como un programa en C, la lista de razones que das no tienen ningun fundamento técnico, los programas no estan "haciendo otras tareas" están haciendo exactamente lo que tu le digas.

Ejemplo muy simple de implementacion de la funcion strlen en C y en Delphi:

Código:
- Strlen en delphi ------------------------------------------------------------------------------

function strlen_ex(p:PChar):integer;
var
 pp:PChar;
begin
  pp:= p;
  while pp^<>#0 do Inc(pp);
  Result:= pp-p;
end;

-Strlen en C --------------------------------------------------------------------------------

int strlen_ex(char *p)
{
char *pp= p;
 
 while(*pp) pp++;
 return pp-p;
}


-- Delphi, resultado de la compilacion en ensamblador ----------------

strlen_ex:
         mov edx, eax
          jmp .L2
.L1:
          inc edx
.L2:
         cmp byte[edx], 00
          jne .L1
         sub edx, eax
         mov eax, edx
         ret

---- C resultado de la compilacion  (usando GCC  3 optimizacion  O3) -------------

strlen_ex:
	push	ebp
	mov	ebp,esp
	mov	edx,[ebp+8]
	mov	eax,edx
	cmp byte	[edx],0
	je	.L2
.L1:
	inc	eax
        cmp byte  [eax], 00
	jne	.L1
.L2:
	sub	eax, edx
	pop	ebp
	ret

---------------------------------------------------------------------------------------------
Los dos codigos en ensamblador resultantes son muy parecidos.
En el ensamblador generado por delphi no hay ninguna instruccion por el medio que no tenga relacion con el algoritmo que se le ha dicho que ejecute, y que podria hacer pensar que el delphi se dedica a "otras tareas" además de lo que se le ha dicho que haga.

En este caso particular el resultado conseguido por delphi es un poco mas rapido y mas pequeño que el resultado de la compilacion con el GCC 3, debido a que el delphi ha optimizado la funcion de tal modo que no usa la pila para pasar el parametro, usa directamente el registro eax del procesador, en cambio la version del gcc usa la pila.

Pero la diferencia de velocidad es minima.

Puedes probar otros algoritmos y comparar los codigos en ensamblador: Puede que en un determinado algoritmo gane delphi y en otro gane el compilador de C, pero en general las variaciones seran mínimas.

La mayoria de razones que das para considerar que C es mas rapido y se puede hacer mas cosas son "mitos" sin ningun fundamento tecnico. Si se usa mucho C es por cuestiones historicas, y porque es un estandard que esta muy extendido entre todas las plataformas hardware, de modo que cualquier programa en C, tomando las precauciones de compatibilidad adecuadas, se puede recompilar facilmente en muchas plataformas.

Saludos
Miguel
Responder Con Cita