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

SL & STL C++ Discussion :

Question sur les vectors


Sujet :

SL & STL C++

  1. #21
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Exact, un code propre, c'est un code qu'on comprend directement en lisant, avec des hacks, c'est plus le cas, et c'est déjà de l'optimisation, alors qu'on ne sait même pas si ce sera critique !

  2. #22
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Bon OK je vais me contenter d'un passage par référence ce sera le plus simple.
    Sinon est-ce qu'il n'y a pas de mécanisme d'optimisation lors de la copie d'un trés grand tableau:un style de swap géré automatiquement; ou est-ce que dans tous les cas la recopie est effectué "bêtement" si rien n'est indiqué par le programmeur.

  3. #23
    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
    Le mieux que tu puisses espérer comme optimisation sur un retour par valeur, c'est la RVO (Return Value Optimization), qui évite parfois une recopie lorsque tu construis directement ton objet sur la ligne du return. Mais ça dépend fortement du compilo.

    Parfois, les grosses classes copiables implémentent aussi une sémantique de déplacement, ce qui permet lors d'une copie de déplacer les données plutôt que de les copier. C'est le cas par exemple dans certaines classes de matrices, si je me souviens bien.

    Tu peux aussi simuler ce comportement avec std::auto_ptr (toujours si je me souviens bien).

  4. #24
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    ce qui permet lors d'une copie de déplacer les données plutôt que de les copier
    déplacer, copier c'est pas la même chose?
    Tu veux dire au niveau des pointeurs sur les zones mémoire.

  5. #25
    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
    Déplacer signifie déplacer la "responsabilité", pas les données en elles-mêmes. En gros tu vas passer ton pointeur vers les données d'une instance à une autre.

  6. #26
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    OK je marque le sujet .

    Merci pour votre aide.

  7. #27
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Laurent Gomila
    Parfois, les grosses classes copiables implémentent aussi une sémantique de déplacement, ce qui permet lors d'une copie de déplacer les données plutôt que de les copier. C'est le cas par exemple dans certaines classes de matrices, si je me souviens bien.

    Tu peux aussi simuler ce comportement avec std::auto_ptr (toujours si je me souviens bien).
    Ca ressemble un peu au Copy-On-Write. Ca permet de faire des copies à peu de frais, en comptant le nombre de références à l'espace mémoire qu'on partage. Par exemple, si on fait brutalement, sur des matrices :
    il faudrait recopier à chaque fois le résultat de l'addition dans a, puis a dans c, ce qui est long. Làs, on copie simplement l'espace mémoire et on dit indique qu'il y a 2 objets qui utilisent cet espace.
    Maintenant, si on veut modifier a, il faut recopier a dans un nouvel espace, et indiquer qu'on ne partage plus qu'avec c.
    Ca marche très bien avec des boost::shared_ptr<>

    MAintenant, si on sait qu'on a juste une seule copie valide à chaque fois, effectivement les std::auto_ptr<> sont idéals car ils transmettent la responsabilité au lieu de la partager.

  8. #28
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 308
    Par défaut
    Les RVO suivant les compilos marchent plutôt bien. J'ai été supris par SunWSPro CC qui se débrouillait pas mal du tout.
    Sinon, les types auto_xxx (il n'y a pas un auto_array chez boost ? -- ou alors, c'est chez adobe?) qui implémentent une sémantique de déplacement sont globalement plus efficaces (et simples à mettre en oeuvre) que le COW -- qui pose des petits problèmes de coût obligatoire en multi-threads.

    Avec le COW, tout parait plus simple car il n'y a qu'un seul type à manipuler. Avec la sémantique de déplacement, aujourd'hui (les rvalue reférences pourraient changer la donner en C++0x -- si acceptées), il faut se balader avec deux types. Avec les passages d'arguments en [out] (référence non constante), l'écriture est un chouilla moins naturelle.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #29
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Chez Boost, ils n'ont pas d'auto_xx, c'est scoped_xxx - non copiable -, shared_xxx, instrusive_ptr ou weak_xxx
    De toute manière, le COW n'est à utiliser que dans des cas très précis.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Question sur les Vector
    Par lazins dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 03/10/2008, 10h07
  2. question sur les listes/set/vector
    Par deubelte dans le forum SL & STL
    Réponses: 11
    Dernier message: 04/01/2007, 21h41
  3. question sur les listes/set/vector
    Par deubelte dans le forum SL & STL
    Réponses: 16
    Dernier message: 28/12/2006, 21h17
  4. [debutant STL] question sur les vectors
    Par killerjeff dans le forum SL & STL
    Réponses: 13
    Dernier message: 19/08/2004, 18h32
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 17h11

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