Bonjour,

Je dois écrire un flux de données dans un fichier qui au final sera de plusieurs giga.

Mon problème est qu'à mesure que j'écris dans mon fichier les données qui arrive, j'ai la ram qui augmente jusqu'à saturation et quand je quitte mon programme la mémoire vive n'est pas libéré sauf si je relance ma lecture en écrasant le fichier, dans ce cas la mémoire est libérée et à nouveau gonflée à mesure de l'écriture du fichier.

J'ai regardé un peu du côté du mapping mais je dois avoué que je suis un peu perdu.

Voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
#include <iostream>
#include <fstream>
#include <vector>
 
int main()
{
   typedef unsigned char uint8;
   typedef vector<uint8>::size_type v_size_type;
   v_size_type const buf_size = 512000;
   vector<uint8> buf(buf_size);
   long i;
   ofstream SaveFile("my_file", ios::app | ios::trunc | ios::binary);
   if(!SaveFile){
       throw "erreur ouverture/creation fichier ecriture";
   }
   for (i=0;i<FLUX;i+=LARGEUR){
       //Remplissage du buffer
       LectureFlux(i,1000,reinterpret_cast<uint8*>(&buf[0]);
 
       //Ecriture du buffer
       SaveFile.write(reinterpret_cast<char const*>(&buf[0]), buf.size()*sizeof(buf[0]));
       SaveFile.flush();
   }
 
   SaveFile.close();
 
   return 0;
}
J'ai essayé d'ouvrire / fermer le fichier pour chaque itération mais ça ne change rien, la mémoire continu à gonfler...

Merci pour votre aide.

Mario

PS: je suis sous linux