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:
J'ai essayé d'ouvrire / fermer le fichier pour chaque itération mais ça ne change rien, la mémoire continu à gonfler...
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; }
Merci pour votre aide.
Mario
PS: je suis sous linux
Partager