IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

rapidite d'un iterateur global?


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Par défaut rapidite d'un iterateur global?
    Bonjou;

    J'utilise dans mon programme la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     int function(Chose *objl) {
        map<Chose *,Cells>::iterator p = list_.find(obj);
        if (p != mat_.end()) {
            return (p->second).qqchose;
        } else {
            return (int)0;
        }
    }
    Cette fonction est appeler un grand nombre de fois. Dans ce cas la est-il judicieux de declarer un iterateur globale evitant ainsi de reallouer a chaque appel de la fonction un nouvel iterateur?

    Merci

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    je suis pas forcément sur que s'alloue un itérateur :s

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Par défaut
    c'est a dire?

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    Bah pour moi les itérateurs sont appelés extrêment souvent donc il faut que leur structure soit le plus simple possible. Je ne suis pas sur de mon coup mais je pense que quand le conteneur est alloué, ce qui sert d'itérateur l'est une bonne fois pour toute aussi

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    tu as toujours le choix de l'allouer en global et tester si c'est plus performant
    mais une allocation sur la pile prend rien en temps,
    la seul chose qui est consomateur dans ton code c'est la fonction find()

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Cette fonction est appeler un grand nombre de fois. Dans ce cas la est-il judicieux de declarer un iterateur globale evitant ainsi de reallouer a chaque appel de la fonction un nouvel iterateur?
    Mauvaise stratégie. Comme déjà dit, une allocation sur la pile ne coûte rien (en gros un décalage d'adresse), et un itérateur est une structure légère faite pour être manipulée comme un pointeur. De toute façon rien qu'en appelant find() tu vas avoir une ou deux constructions / copies d'itérateur.
    Il y a tellement d'autres choses à optimiser avant ça (pour peu que ça soit optimisable).

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Par défaut
    C'est vrai j'ai tester avec un iterateur global et cela ne va pas plus vite ( ca ralenti meme un peu le programme).

    J'ai teste une autre strategie qui consiste a ne plus utiliser de map mais un tableau de taille 5(=le nombre max de Chose possible avec vect[i]=0 si il n'y a pas d'instance de Chose i a cet endroit) Ainsi je fais un appel direct a vec[i] pour avoir la valeur voulue. Je n'utilise donc plus la fonction find. Ce qui apparemment permet d'accelerer le programme

Discussions similaires

  1. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  2. Rapidite enregistrement
    Par mika dans le forum Débuter
    Réponses: 9
    Dernier message: 25/04/2003, 15h15
  3. Fichier de fonctions globales
    Par PEM dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/07/2002, 21h35
  4. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo