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 :

Taille par défaut d'1 string (pour 1 reserve efficace)


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut Taille par défaut d'1 string (pour 1 reserve efficace)
    Salut,

    Je bloque en ce moment sur une question d'optimisation, et je n'ai trouvé la réponse nulle part ... peut être pourrez vous m'aider

    J'ai une std::multimap, qui stocke des paires <std::string, structure_quelconque>. La structure en question est un POD qui ne pose pas de problème de copie.

    Pour optimiser le code, j'aurais voulu faire un reserve sur cette multimap dès de constructeur de mon objet, mais le problème c'est que ma paire n'a pas une taille fixe (à cause du string). Donc le reserve ne fait pas tout à fait son rôle, et il y a quand même des allocations quand j'utilise insert().

    Je ne sais pas si j'ai été bien clair
    Mais donc, l'idéal serait de reserver une taille par défaut aux strings de la map, par exemple (ne compile pas ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    multimap< string<16>, mastructure >
    Pour que le reserve(10) puisse effectivement reserver assez de place pour insérer 10 paires sans faire d'allocation.

    Vous en pensez quoi ?
    Merci

  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
    Hum... Personnellement je n'ai pas de reserve sur un multimap (ni dans VC 7.1, ni dans ma doc SGI), ce qui me paraît d'ailleurs plutôt logique puisque sa structure interne n'est pas fixe, contrairement aux tableaux ou aux listes.

    :

    Sinon concernant les strings, certains compilos récents (VC 7.1 je crois) utilisent par défaut un tableau statique de 16 char pour optimiser les chaînes courtes.

  3. #3
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Aie, j'ai pensé trop vite

    Je "voulais" faire un reserve pour éviter l'allocation au moment de l'insert, mais je n'ai pas pensé 1 seconde qu'il pouvait être absent ....
    edit :
    Donc le reserve ne ferait pas tout à fait son rôle, et il y aurait quand même des allocations quand j'utilise insert().... si il existait
    Donc au final, il n'y a donc aucun moyen d'éviter l'allocation quand on insère dans une multimap ? En fait, celle-ci doit être faite dans un callback, et je ne peux pas faire de new dedans (c'est un peu compliqué à expliquer... ).

    Sinon concernant les strings, certains compilos récents (VC 7.1 je crois) utilisent par défaut un tableau statique de 16 char pour optimiser les chaînes courtes.
    En fait on utilise Code Warrior, donc je ne sais pas trop ce qu'il faut pour ça ....

    Mais merci pour ces infos !

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Créér ton propre allocator sur tu donnes à ton multimap.

  5. #5
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Mmm, c'est à dire ?
    Est ce que tu pourrais développer un peu plus s'il te plait ?

    J'ai pensé à créer un allocator, mais je n'ai pas vu comment ça pouvait résoudre mon problème de "0 allocation dans le callback".

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Au lieu d'allouer de la mémoire, tu peux dans ton allocateur retourner un pointeur sur une zone mémoire allouée précedémment. Si tu peux être certain que tu auras assez de place dans la zone préallouée, ça peut répondre à ton besoin.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Mmm, bien vu !
    Merci à tous pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CKEditor] Comment changer la taille par default du texte
    Par fredtux dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 28/01/2009, 16h31
  2. <div></div> taille par défault ?
    Par Chichouille dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 02/12/2007, 18h29
  3. [2007] Taille par défaut de la police dans les graphiques
    Par |DUCATI| DesMo dans le forum Powerpoint
    Réponses: 0
    Dernier message: 09/11/2007, 10h07
  4. [DotNET 1.1] Taille Max d'une chaîne d'un string
    Par trihanhcie dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 23/10/2007, 15h59
  5. Trier des fichiers par taille par le VB
    Par tedparker dans le forum Access
    Réponses: 2
    Dernier message: 23/08/2006, 11h59

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