He estado haciendo algunas pruebas. Mira esto:
Paso por valor:
Código:
#include<stdio.h>
int suma(int a,int b)
{
return a+b;
}
int main()
{
int j,i,a,b;
a=10;
b=30;
for(i=0;i<30000000;i++)
{
j = suma(a,b);
}
return;
}
Paso por referencia:
Código:
#include<stdio.h>
int suma(int *a, int *b)
{
return (*a)+(*b);
}
int main()
{
int j,i,a,b;
a=10;
b=30;
for(i=0;i<30000000;i++)
{
j=suma(&a,&b);
}
return;
}
El tiempo que tarda el segundo programa en ejecutarse es ligeramente superior al del primero
Código:
time ./prueba1
real 0m0.185s
user 0m0.160s
sys 0m0.004s
Código:
time ./prueba2
real 0m0.237s
user 0m0.220s
sys 0m0.000s
Esto se debe a que la indirección requiere una operación a mayores, mientras que el contenido que se introduce en la pila es del mismo tamaño en los dos casos (el tamaño de un puntero es el mismo que un int, 4 octetos)