Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage de pointeur ou de référence à une fonction

Performances

Sujet résolu
Anonyme
    9 mai 2008 à 20:33:04

    Je me pose une question : au lieu de passer directement une variable à une fonction, lui passer une référence ou un pointeur sur la variable augmente-t-il les performances ?
    Car en effet le passage se fait par valeur, ce qui fait que la variable est "recopiée" pour les besoins de la fonction, donc elle devrait occuper 2 fois la taille nécessaire :o
    Donc pour optimiser les performances, on ne devrait pas faire comme ça :

    int nbr = 0;
    
    int carre(int nombre) {
        return nombre * nombre;
    }
    
    carre(nbr);
    


    mais plutôt comme ça :

    int nbr = 0;
    
    int carre(int &nombre) {
        return nombre * nombre;
    }
    
    carre(nbr);
    


    ou comme ça (façon C) :

    int nbr = 0;
    
    int carre(int *nombre) {
        return *nombre * *nombre;
    }
    
    carre(&nbr);
    


    Est-ce que vous pourriez me confirmer ma théorie ? :)
    • Partager sur Facebook
    • Partager sur Twitter
      9 mai 2008 à 20:37:39

      pour un int c'est inutile. PAr contre pour des plus grosses variables c'est effectivement mieux. Par contre on passe par référence constante.

      int nbr = 0;

      int carre(const int &nombre) {
      return nombre * nombre;
      }

      carre(nbr);
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        9 mai 2008 à 20:39:36

        Pour un petite variable, tu y perds, pour une grosse, tu y gagnes.
        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        Anonyme
          9 mai 2008 à 21:06:47

          @lmghs : j'y gagne toujours : la mémoire, même sur une petite variable, y en aura toujours plus de libre, même s'il est petite.

          Je comprends pas trop le coup de la référence constante. On la met en constante même si on ne modifie pas la variable dans la fonction ?

          J'ai compris :)
          • Partager sur Facebook
          • Partager sur Twitter
            9 mai 2008 à 21:09:01

            Non, tu commenceras au moins autant en mémoire -- sous entendu potentiellement plus. Une adresse est une variable comme une autre.
            Plus le prix du déréférencement.
            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
            Anonyme
              9 mai 2008 à 21:12:33

              Donc, pour une variable de type simple comme int, on consomme autant ?
              • Partager sur Facebook
              • Partager sur Twitter
                9 mai 2008 à 22:44:09

                Et un char plus.
                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                Anonyme
                  10 mai 2008 à 9:05:36

                  Le char pour stocker l'adresse ?
                  Donc, ce n'est intéressant que pour les tableaux et les objets ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 mai 2008 à 9:28:04

                    Disons que le gain n'existe que pour les objets O qui vérifient:

                    sizeof(int) < sizeof(O)

                    Et il est d'autant plus important que sizeof(O) est grand. En pratique, on ne passe pas les types de base par référence constante.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                    Anonyme
                      10 mai 2008 à 9:32:40

                      Je m'en doutais.
                      Merci pour vos réponses !
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Passage de pointeur ou de référence à une fonction

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown