Stringstream : augmenter la taille initiale du buffer

cs_jmlac Messages postés 1 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 18 avril 2007 - 18 avril 2007 à 10:50
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 18 avril 2007 à 11:25
Bonjour à tous,

je suis débutant en C++ et j'ai un problème de performance avec l'utilisation d'un stringstream.

Pour corriger ce problème, je dois augmenter la taille initiale du stringbuf qui est utilisé par le stringstream pour éviter des milliers d'allocations.....

stringstream ss;
ss.precision(20);
char mybuffer [100000];
ss.rdbuf()->pubsetbuf(mybuffer,100000);
 
for(int i=0 ; i<40000 ; i++){     // boucle bidon
     ss << (2*((double)i)+1)/11;
}
 

la ligne ss.rdbuf()->pubsetbuf(mybuffer,100000)
ne change pas la temps d'exécution !

En fait mon exemple est simplifié, je ne peux pas connaitre pas la taille exacte du buffer mais je peux par contre en faire une estimation. Il me faut utiliser quelquechose qui permet de préciser la taille initiale .

J'ai regarder aussi strstreambuf qui permet de préciser une taille initiale, mais je n'arrive pas à l'utiliser avec un stringstream ou avec autre chose !

Je suis quasi débutant, au secours <!-- / message --><!-- edit note -->

1 réponse

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 avril 2007 à 11:25
J'ai pas l'impression que tu puisses réserver de l'espace mémoire avec ces objets. Ya rien dans la doc:
http://www.cplusplus.com/reference/iostream/

Mais juste une remarque, fais gaf, tu vas faire exploser la pile avec ce genre d'allocation:
char mybuffer [100000];

SI tu remplaces ca par 1.000.000, ton programme crash directement.

Dans le pire des cas, tu peux refaire toi meme un object basic pour gérer tes manipulations et optimiser la mémoire.
0
Rejoignez-nous