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 :

d'autres string-like que les ropes?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2
    Par défaut d'autres string-like que les ropes?
    Bonjour à tous,

    Jusqu'à présent, j'utilisais des c-string (un simple tableau de char) plutot que des c++ string pour des raisons de performance (je n'ai que récemment découvert les moultes réallocations(!!) des string c++).

    Je trouve dommage d'avoir à préallouer à chaque fois ce tableau, car je me retrouve à hardcoder ces valeurs et il est courant d'allouer bien plus que nécessaire.
    Je ne fais que insérer des chaines de caractères au début (rarement) et à la fin (toujours). J'ai aussi parfois besoin supprimer les n derniers caractères (ou de reculer et de les overwriter ce qui revient au même).


    J'ai donc codé une solution intermédiaire à base de listes chaînées de c-string, en ayant un proxy qui alloue de nouveaux blocks si nécessaire. Le problème, c'est que je dois maintenir un contexte qui contient des infos telles que la position du curseur courant du block courant, l'adresse du block courant etc... Et ce maintient est couteux.

    J'ai fait quelques recherches sur le WWW à la recherche de solutions miracles, et j'ai peut etre trouvé mon bonheur dans les ropes (http://www.sgi.com/tech/stl/Rope.html), dont l'implémentation GNU semble être exactement reprise de SGI.

    Déjà, pensez-vous que je suis sur une bonne piste?

    Si oui, je me demande si je pourrai raisonnablement créer des iovecs à partir des blocks internes des ropes pour éviter des copies inutiles..

    Merci bcp

  2. #2
    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
    Personnellement, je n'ai jamais eu de problème de performances dûes aux mitouilles internes des std::string. Et si vraiment cela posait problème, j'imagine qu'en gérant bien les allocations (à coup de reserve() et autres) tu devrais pouvoir résoudre le problème.

    En ce qui concerne la classe rope, il me semblait avoir lu que c'était utile surtout pour les chaînes immenses. Maintenant, si c'est effectivement ce que tu manipules, alors oublie ce que je viens de dire.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2
    Par défaut
    Merci Loulou24 pour ta réponse.
    Je n'ai pas vraiment à gérer de chaines immenses (bien que ca peut facilement monter à plrs centaines de ko).
    Je n'ai rien de particulier contre les string, sinon leur sous efficacité lors des réallocations et l'impossibilité apparente d'en extraire facilement des iovecs. En fait je commence à croire qu'utiliser des deque bidirectionnelles de tableau de char devrait le faire..

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Dans ce cas, pourquoi n'utilises tu pas directement des vector ou deque de char ? (les deque sont implémentées avec des listes chaînées de tableaux...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Autre chose que les SSII
    Par Invité dans le forum Emploi
    Réponses: 18
    Dernier message: 25/08/2006, 12h36
  2. [selectitem]Value accepte que les String?
    Par djodjo dans le forum JSF
    Réponses: 4
    Dernier message: 21/07/2006, 13h16
  3. Réponses: 3
    Dernier message: 05/01/2006, 13h11
  4. Qu'est-ce-que perl à de plus que les autres ?
    Par Celelibi dans le forum Langage
    Réponses: 7
    Dernier message: 24/08/2005, 01h00
  5. Un autre moyen que les popups ?
    Par bdaboah dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/03/2005, 10h48

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