begin process at 2012 05 29 19:09:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

[Performance] Passage par valeur | Passage vers pointeur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[Performance] Passage par valeur | Passage vers pointeur

mercredi 3 août 2005 à 22:06:05 | [Performance] Passage par valeur | Passage vers pointeur

BIG_BOSS_001

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

mercredi 3 août 2005 à 22:23:00 | Re : [Performance] Passage par valeur | Passage vers pointeur

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
bein sur que passer l'adresse est moins intéressant que dircet la valeur si c'est pour un simple int, la fonction recevante devra déréférencer l'adresse pour lire la valeur.
On passe l'adresse quand la fonction doit modifier ce qui est à cette adresse ou dans le cas d'une structure, etc...

ciao...
BruNews, MVP VC++
mercredi 3 août 2005 à 22:28:40 | Re : [Performance] Passage par valeur | Passage vers pointeur

bayeto

Membre Club
En effet. Refais ton test avec une structure genre nombre complexe, tu vera la difference...
mercredi 3 août 2005 à 22:45:58 | Re : [Performance] Passage par valeur | Passage vers pointeur

xterminhate

Membre Club
Et le passage par référence, c'est pour les clowns ;-)
mercredi 3 août 2005 à 22:47:50 | Re : [Performance] Passage par valeur | Passage vers pointeur

bayeto

Membre Club
En C? connais pas.
mercredi 3 août 2005 à 22:51:25 | Re : [Performance] Passage par valeur | Passage vers pointeur

xterminhate

Membre Club
En effet, si tu es contraint à faire du C pur, c'est copie. Si tu peux faire un peu de C++, ce n'est plus pareil.
mercredi 3 août 2005 à 22:53:38 | Re : [Performance] Passage par valeur | Passage vers pointeur

BruNews

Administrateur CodeS-SourceS
par référence ou adresse, 2 mots qui désignent la même chose, y a que la syntaxe qui change.

ciao...
BruNews, MVP VC++
mercredi 3 août 2005 à 22:57:30 | Re : [Performance] Passage par valeur | Passage vers pointeur

xterminhate

Membre Club
Le compilateur C++ n'est-il pas en mesure de réaliser certaine optimisation lorsqu'on utilise correctement le passage par référence ?
mercredi 3 août 2005 à 23:02:56 | Re : [Performance] Passage par valeur | Passage vers pointeur

BruNews

Administrateur CodeS-SourceS
Mais c'est stricto sensu LA MEME CHOSE, c'est toujours un pointeur sur une adresse mémoire, y a pas d'alternative, ou on a la valeur ou on a l'adresse.

en cas d'adresse (ou référence) avec 1 param:
mov  edx, [esp+4]
mov  eax, [edx]  // valeur accédée
il a fallu 2 instructions et donc 2 lectures mémoire pour accéder à la valeur

si valeur passée:
mov  eax, [esp+4]  // valeur en 1 seule instruction

ciao...
BruNews, MVP VC++
mercredi 3 août 2005 à 23:22:53 | Re : [Performance] Passage par valeur | Passage vers pointeur

xterminhate

Membre Club
Ok pour l'asm, ca parait logique. Cela dit, le passage par pointeur est exceptionnel en C++. On prefera le passage par reference, voire reference-const.

1 2

Cette discussion est classée dans : int, valeur, passage, void, return


Répondre à ce message

Sujets en rapport avec ce message

récursivité et factorielle!!! [ par cabarrus ] salut je veux écrire un programme qui calcule et renvoie le résultat factorielle en utilisant la récursivité de n'importe qu'elle nombre entier voici important [ par cmoapierre ] File1.h:class Addition100 { private : int Valeur ; public : void EcrireNombre(int prmN) ; void Additionner100(void) ; int LireNombre(voi aide en c/c++ gestion classe [ par moussadjijunior ] Bonjour à tous J'oses croire que vous allez tous bien et que vos familles ne manque de rien.Je viens aujourd'hui auprés de vous car j'ai u probleme av chaine de caractere [ par superstarz ] Bonjour, Je suis débutant en C++, et je seche sur un TP concernant les chaines de caractère.Les érreurs qui surviennent lors de la compilation sont le Return tableau? [ par zut69 ] Bonjour,Je suis en train d'écrire un petit programme sur les matrices en C, mais vu que je veux faire quelque chose d'assez général, j'ai besoin que d Problème de tabeau dans un code orienté objet [ par Guiiil ] Bonsoir, je débute actuellement en C++ orienté objet et je suis bloqué avec ce programme qui doit réaliser un tableau d'élèves, prendre leur moyenne e Algorithme de tri en c++, mais ... [ par mohboa ] les derniers jour j'ai travail sur un projet de tri par decalage dans un tableau et j'ai reussi d'ecrir un code sans errore en dev c++  mai il ma donn Aide, résolution d'un taquin [ par Micha1177 ] Bonjour, Dans le cadre d'un projet, je doit élaborer une grille de taquin résoluble, et pouvoir effectuer le déplacement des cases, et ensuite concev un pti prob ... :s help [ par meksoft002 ] Bonjour, c'est ma première participation en vue que vous pourrez resoudre mon problème ..voila...je vouderais mettre en oeuvre un tableau d'objets "pe


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,044 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales