Bonjour,
Je me pose une petite question sur les performances entre le passage par valeur et par pointeur.
Je sais que le premier reçoit par la pile une copie de la variable alors que l'autre sa fonctionne avec son adresse.
Donc sa veut dire que le second devrai être plus rapide, non ?
Je me suis alors amuser à faire ce code en C :
Passage par pointeur :
#include <time.h>
#include <stdio.h>
void Add(int* a, int b)
{
*a += b;
}
void Sou(int* a, int b)
{
*a -= b;
}
void Mul(int* a, int b, int c)
{
*a = b * c;
}
void Div(int* a, int b)
{
*a /= b;
}
void Car(int *a)
{
int b;
b = *a;
*a = b * b;
}
int main(void)
{
int a = clock();
int b = 1;
int c = 8000;
int e = 1;
int i = 1;
int d;
for (b; b <= 1000000; b++)
{
for (e; e <= 1000000; e++)
{
while (i != 1000000)
{
Add(&c, b);
Sou(&c, b - 4);
Mul(&c, c, b * 2);
Div(&c, b);
Car(&c);
i++;
}
}
}
d = clock() - a;
printf("%d\n", d);
return 0;
}
Passage par valeur :
#include <time.h>
#include <stdio.h>
int Add(int a, int b)
{
return a + b;
}
int Sou(int a, int b)
{
return a - b;
}
int Mul(int a, int b)
{
return a * b;
}
int Div(int a, int b)
{
return a / b;
}
int Car(int a)
{
return a * a;
}
int main(void)
{
int a = clock();
int b = 1;
int c = 8000;
int e = 1;
int i = 1;
int d;
for (b; b <= 1000000; b++)
{
for (e; e <= 1000000; e++)
{
while (i != 1000000)
{
c = Add(c, b);
c = Sou(c, b - 4);
c = Mul(c, b * 2);
c = Div(c, b);
c = Car(c);
i++;
}
}
}
d = clock() - a;
printf("%d\n", d);
return 0;
}
Conclusion le passage par valeur et plus rapide que le passage par pointeur.
Alors dans quel(s) cas le passage par pointeur est il plus rapide que celui par valeur ?
BIG_BOSS