Re: Benchmarking en distintos lenguajes [ Era algo así como cliente en jabber... ]

Rodrigo Javier Tobar Carrizo rtobar en alumnos.inf.utfsm.cl
Lun Nov 19 01:02:15 CLST 2007


Rodrigo Fuentealba wrote:
>>
>> Es decir:
>>
>> for(i=0; i<N; i++) a[i] = b[i] + c[i];
>>
>> es muchisimo mas rapido que
>>
>> for(i=0; i<N; i++) a[i] = sum(b[i], c[i]);
> 
> Depende.
> 
> Si en C haces algo así:
> 
> #include <stdio.h>
> #define SUM(A,B)        A + B
> 
> int main(void)
> {
>         int x = 5, y = 10, z;
> 
>         z = SUM(x,y);
>         printf("%i\n", z);
>         return 0;
> }
> 
> El preprocesador de C reemplaza la operatoria en tiempo de
> compilación, y permite hacer cosas como esa sin pérdida de ciclos en
> tiempo de ejecución.
> 

No es tan asi... la cosa se hace en dos pasos separados (que uno puede 
hacer manualmente):

1) Primero se precompila el codigo C para reemplazar todas las macros 
del preprocesador, insertar archivos .h, definir nuevos numeros de 
linea, remover comentarios, etc...
2) Esto produce un codigo C fresco, limpio y listo para ser compilado 
directamente. Es ahora cuando se compila realmente el codigo para 
convertirlo en codigo maquina.

En el primer caso (el del for sumando arreglos) hay realmente una 
llamada codigo de otra funcion, lo que realmente retarda la ejecucion 
del programa. En el segundo caso, cuando usan la macro definida con 
directivas del preprocesador, lo que realmente esta pasando es que la 
macro se reemplaza ANTES de ser compilada, por lo que si la usamos mil 
veces, el codigo va a estar replicado en esas mil partes.

Pueden probar. Haganse un .c con el ejemplo de arriba, pero llamando a 
la macro hartas veces. Luego,

rtobar en micasa $> cpp lala.c > salidaPreprocesador.c

y miren salidaPreprocesador.c

Si, desde el punto de vista del programador es lo mismo (estoy llamando 
una funcion). Pero una esta definida en el codigo C, y otra es 
reemplazada antes de la compilacion.

Saludos!
-- 
Rodrigo Tobar Carrizo                   Linux User #399271
CSAT project Leader                     +5696125127
http://www.alumnos.inf.utfsm.cl/~rtobar


Más información sobre la lista de distribución Linux