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

  FORUM HardWare.fr
  Programmation
  C++

  Augmentation mémoire avec " << ENDL"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Augmentation mémoire avec " << ENDL"

n°2078046
codename44
Posté le 25-05-2011 à 10:01:55  profilanswer
 

Bonjour,
 
Je suis à la recherche depuis un moment sur mon programme de la cause de l'augmentation de mémoire ram utilisée.
 
Dans ma boucle principale, je crée tout un tas d'objet à partir d'un flux, je les analyse, et un peu tout le long j'enregistre des infos dans un fichier log.
 
J'ai passé beaucoup de temps à vérifier la première partie de création d'objet et je suis quasi sur qu'il n'y plus de fuites, ou alors vraiment très faibles.
Le point qui m’intrigue le plus c'est que en dé-commentant ligne par ligne la suite du programme je me suis rendu compte que l'augmentation mémoire  se jouait au moment où je log les infos.
 
Je déclare ça :
 

Code :
  1. ofstream fichier(OutputFile, ios::out | ios::trunc);


 
EDIT :
Seule cette ligne la fait la différence finalement :

Code :
  1. fichier << endl;

=> augmentation significative de la mémoire

Code :
  1. fichier << '\n';

=> pas d'augmentation significative de la mémoire
 
Quelque chose m'échappe dans tout ça j'espère que vous pourrez m'éclairer !
merci


Message édité par codename44 le 25-05-2011 à 14:31:19
mood
Publicité
Posté le 25-05-2011 à 10:01:55  profilanswer
 

n°2078050
shaoyin
Posté le 25-05-2011 à 10:35:06  profilanswer
 

A première vue, je ne vois pas le lien avec une fuite mémoire. Si tu travailles sous Linux, valgrind est ton ami pour ce genre de problème.

n°2078054
codename44
Posté le 25-05-2011 à 10:58:57  profilanswer
 

merci de t'intéresser à mon problème.
moi aussi cela m'intrigue pourtant j'ai fais le tests dans tous les sens, dès que je rajoute un "<< endl" à la place d'un << '\n', et en ne changeant que ça, la mémoire se met à grimper de manière assez importante.
 
et je travaille avec visual studio 2010

n°2078057
olivthill
Posté le 25-05-2011 à 11:07:00  profilanswer
 

Tiens, il y a %i au lieu de %d.
Mais d'après la doc, c'est un remplacement possible, bien que très peu fréquent.
 
Tiens, il y a sprintf_s() au lieu de sprintf().
Voyons la doc, http://msdn.microsoft.com/fr-fr/li [...] s.80).aspx :

Citation :

... sprintf_s takes a length parameter specifying the size of the output buffer in characters...

Or, dans le code, cette taille est manquante (de plus le code retour de sprintf_s() n'est pas testé, ce qui fait perdre tout son intérêt à sprintf_s()).
 
Cela me parait une piste intéressante à étudier, mais le problème n'est peut-être pas (uniquement) là.
 

n°2078058
codename44
Posté le 25-05-2011 à 11:12:23  profilanswer
 

merci oui je n'avais pas fais attention à ça, mais ce n'était qu'un test supplémentaire, pour voir si cette méthode faisait augmenter la mémoire, et ce n'est pas le cas
mais j'utilise "<< '\n'" au lieu de "<< endl" qui à l'air de fonctionner aussi, sans savoir trop pourquoi :p

n°2078066
gilou
Modérateur
Modzilla
Posté le 25-05-2011 à 11:35:54  profilanswer
 

Si tu permutes tes deux lignes, la première déclenche t'elle toujours une augmentation significative par rapport à la seconde?
Ou l'augmentation suit elle la ligne permutée?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2078067
codename44
Posté le 25-05-2011 à 11:42:31  profilanswer
 

Désolé, je ne comprends pas ta question
Quelles deux lignes ?
 
Précision : j'ai toujours testé qu'une seule des 3 manières (avec endl, avec '\n' et avec .write() ) à la fois  et seul "endl" fait augmenter la mémoire

n°2078082
gilou
Modérateur
Modzilla
Posté le 25-05-2011 à 13:45:33  profilanswer
 

Ce qui n'était pas clair au vu du bout de code posté.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2078083
Un Program​meur
Posté le 25-05-2011 à 13:58:32  profilanswer
 

Dans ce que tu dis, rien n'explique vraiement le comportement dont tu te plains. Et avec
 
    fichier << "var1 : " << var1 << '\n';
    fichier << "var1 : " << var1 << '\n' << flush;
    fichier << "var1 : " << var1 << "\n" << flush;
 
que se passe-t'il?


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2078101
codename44
Posté le 25-05-2011 à 14:29:12  profilanswer
 

Salut j'ai édité le premier post en espérant qu'il soit plus clair
La question que je me posais, c'est pourquoi le endl fait augmenter la taille du programme en mémoire alors que les autres manières d'écrire dans le fichier ne la changent pas.
 
En modifiant encore pour tester ce que tu viens de proposer, j'ai trouvé la ligne exacte, c'est :

Code :
  1. fichier << endl;


lorsqu'il ya du texte entre les deux toutes les méthodes fonctionnent correctement

mood
Publicité
Posté le 25-05-2011 à 14:29:12  profilanswer
 

n°2078237
Amonchakai
Posté le 25-05-2011 à 20:20:46  profilanswer
 

Essaye de compiler en release  :whistle:  
 
Honnetement, quand j'ai vu le titre de ton sujet, direct j'ai reconnu VS :D  
J'ai eu le meme pb il y a quelques années sous le 2005 ou il y avait des bugs dans basic_iostream...  
Mon thread de l'epoque: http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
 
 
bah 5 ans plus tard ça a l'air de pas être mieux :D

n°2088426
Imothep14
Posté le 09-07-2011 à 18:43:34  profilanswer
 

A mon avis ça veux juste dire que "cout " applique un "cout.flush ()" automatiquement quand tu lui envoies "\n".


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

  Augmentation mémoire avec " << ENDL"

 

Sujets relatifs
comment charger un certificat en mémoireLa Quadrature du Net cherche de laide pour réécrire Mémoire Politique
[C++] Comment récupérer La mémoire virtuelle occupée par un processus?Fuite de memoire
nombre de cases mémoire dans un système 32 bitslimites VBA_excel_2007?? ( Erreur 7_Mémoire Insuffisante)
Random dans flash avec mémoire ?mémoire disponible
dlclose et gestion mémoire => segfaultTaille mémoire d'un objet
Plus de sujets relatifs à : Augmentation mémoire avec " << ENDL"


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