Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1062 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Probleme conso mémoire string (libstdc++)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme conso mémoire string (libstdc++)

n°1339707
Profil sup​primé
Posté le 05-04-2006 à 14:42:24  answer
 

Bonjour
J'utilise des string de la libstdc++ v3 (portée sur un OS en cours de développement). J'ai un probleme de consommation mémoire. En traçant les mallocs qui viennent de la gestion des strings j'ai une méoire allouée 5 à 10 fois plus grande que le nombre de caractère total utilisé.
Par exemple si j'éxécute un main de test avec seulement l'instruction "string s(1, 'a')" et rien d'autre  j'ai un malloc de 640 bytes. Je sais que pour éviter des appels trop fréquents à malloc une plus grande zone que nécessaire est allouée pour etre réutilisée ensuite pour els strings suivantes. Est-ce que ça doit etre le cas meme s'il n'y a pas d'autre string dans le code ?
De plus si je fais plusieurs déclarations et initialisations de string, la mémoire allouée au début n'est pas réutilisée, il y a un autre malloc.
 
Avez-vous une idée ?  
D'autre part des liens de tutoriaux sur le fonctionnement des strings et streams seraient bienvenus (meme dans le Stroustrup que j'ai ce n'est pas détailllé ni dans la doc de libstdc++ -ou alors je cherche comme une chèvre).
 
Cordialement

mood
Publicité
Posté le 05-04-2006 à 14:42:24  profilanswer
 

n°1339760
Taz
bisounours-codeur
Posté le 05-04-2006 à 15:47:24  profilanswer
 

montre ta trace : tu parles de malloc ou sbrk ?

n°1339838
Profil sup​primé
Posté le 05-04-2006 à 16:28:38  answer
 

Ma trace ?
c'est bien malloc (j'ai juste ajouté des printf dans la libc dans malloc).

n°1339853
Taz
bisounours-codeur
Posté le 05-04-2006 à 16:39:08  profilanswer
 

ah ouais ... bah t'en fait pas, mieux vaut allouer des gros morceaux en prévision de plus, plutot que des micro morceaux à tout va. donc en fait, t'es parano

n°1339933
Profil sup​primé
Posté le 05-04-2006 à 18:14:25  answer
 

Euh excuse moi perso je bosse j'ai pas envie de déconner.
T'as jamais du bosser sur un système embarqué j'imagine.

n°1339946
morph
Posté le 05-04-2006 à 18:50:19  profilanswer
 

définis ta propre class allocator
 

Code :
  1. class myAllocator
  2. : public allocator
  3. {
  4. public:
  5.   pointer
  6.   allocate(size_type __n, const void* = 0);
  7.    void
  8.    deallocate(pointer __p, size_type);
  9. };
  10. typedef basic_string<char, char_traits<char>, myAllocator<char> >    myString;

n°1339959
Taz
bisounours-codeur
Posté le 05-04-2006 à 19:10:58  profilanswer
 

bah je vois pas ce que ça change de faire son allocateur. si std::string veut 640o, c'est qu'elle en a besoin.

n°1341233
Profil sup​primé
Posté le 07-04-2006 à 10:25:25  answer
 

OK merci pour le conseil

n°1341741
SBAM
Best recording of rach 3.
Posté le 07-04-2006 à 19:07:01  profilanswer
 


Faire du C++ sur de l'embarque c'est du foutage of gueule.

n°1341904
++fab
victime du syndrome IH
Posté le 08-04-2006 à 01:49:48  profilanswer
 


 
640 bytes, ça me parait beaucoup. Soit il y a un problème dans ta façon de mesurer, soit alors, c'est un bug.
Si tu as valgrind sous la main : $ valgrind ./a.out
Sur mon implementation, j'ai 14 bytes d'alloués pour std::string( 1, 'a' ), puis quand la chaine devient assez grande, la mémoire allouée à l'air d'être a peu près le double de celle demandée. Ceci en prévision d'agrandissement de la chaine, adaptée à une utilisation typique des chaines de caractères.
Après, à toi de voir si le cout en espace est satisfaisant dans le contexte de ton application. Si non, tu peux envisager de ne pas utiliser std::string dans ce cas la. (tu es déjà veinard d'avoir le droit au free store, non ? :) )
 

Citation :

D'autre part des liens de tutoriaux sur le fonctionnement des strings et streams seraient bienvenus (meme dans le Stroustrup que j'ai ce n'est pas détailllé ni dans la doc de libstdc++ -ou alors je cherche comme une chèvre).


pour le fonctionnement des strings et streams, le BS est pas mal. Si tu veux connaitre l'implémentation de *ta* bibliothèque C++, ce n'est plus du ressort du BS (qui se base sur la norme), mais de la doc de libstdc++-v3 -- et ils ne documentent pas la stratégie de consommation mémoire de std::string.
 

mood
Publicité
Posté le 08-04-2006 à 01:49:48  profilanswer
 

n°1341905
++fab
victime du syndrome IH
Posté le 08-04-2006 à 01:54:17  profilanswer
 

SBAM a écrit :

Faire du C++ sur de l'embarque c'est du foutage of gueule.


ton assertion plutot.

n°1341918
SBAM
Best recording of rach 3.
Posté le 08-04-2006 à 03:58:34  profilanswer
 

++fab a écrit :

ton assertion plutot.


C'est sur que l'interruption d'une structure de controle c/c++ est on ne peut plus adapte a l'embarque http://forum-images.hardware.fr/icones/message/icon10.gif

n°1341947
++fab
victime du syndrome IH
Posté le 08-04-2006 à 09:40:29  profilanswer
 

SBAM a écrit :

C'est sur que l'interruption d'une structure de controle c/c++ est on ne peut plus adapte a l'embarque http://forum-images.hardware.fr/ic [...] icon10.gif


?

n°1344351
Joel F
Real men use unique_ptr
Posté le 11-04-2006 à 17:45:29  profilanswer
 

Si cette question d'allocation te tarabuste, rien ne t'empeche de developper soit un allocator à toi soit une mini class string de taille fixe.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Probleme conso mémoire string (libstdc++)

 

Sujets relatifs
Problème d'accentsproblème sur excel
[Résolu] Problème VS 2005 et Postgresqlproblème avec substr
problème pour charger des mesh au format .xprobléme avec la fonction rmdir
javascript: probleme de focus[EasyPhp] Gros problème de lenteur avec MySQL
probleme parse_urlUtilisation de libsndfile: problème de link
Plus de sujets relatifs à : Probleme conso mémoire string (libstdc++)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR