FreeImage liberation memoire

FreeImage liberation memoire - C++ - Programmation

Marsh Posté le 13-07-2005 à 17:55:50    

Bonjour,
 
J'utilise la librairie FreeImage, et disposan de plusieur images, je les ai mise dans un tableau  declarer comme ceci :
   
FIBITMAP **tabImage;
tabImage=new FIBITMAP *[nbImages];
 
je charge mes image ensuite comme cela :
 
tabImage[i] = FreeImage_Load(FIF_JPEG, ListeFichiers->Strings[i].c_str(), JPEG_DEFAULT);
 
comme j'ai beaucoup d'images qui se stockent en memoire cela me prend enormement de place en memoire plus de 500 mo suivant les images de depart.Par consequent, il faut que je libere la mémoire a la fin, c la ou est le problème.
J'ai beau faire :  
 
FreeImage_Unload(tabImage[i]);
free(tabImage[i]);
 
J'ai toujours autant de memoire utilisé. Comme je voudrai utiliser le programme plusieur fois a la suite sans quitter pouis relancer, il faudrai un moyen de liberer corectement la memoire.
 
Merci de votre aide!

Reply

Marsh Posté le 13-07-2005 à 17:55:50   

Reply

Marsh Posté le 13-07-2005 à 17:58:38    

Quand on utilise new, on utilise delete et non pas cet ignoble free que tu fais tout droit issu du C
 
Edit, d'ailleurs, ca me semble très bancal, ce que tu fais ...


Message édité par theshockwave le 13-07-2005 à 17:59:25
Reply

Marsh Posté le 13-07-2005 à 18:01:01    

tabImage=new FIBITMAP *[nbImages];  
 
implique d'avoir la ligne suivante plus loin :
 
delete [] tabImage;
 
et si ton FreeImage_Load alloue la mémoire, alors tu n'as pas besoin de plus que FreeImage_nload, en toute logique, donc ton free(tabImage[i]) n'a absolument rien à faire ici

Reply

Marsh Posté le 15-07-2005 à 09:54:48    

Salut,
 
j'ai essayer de faire delete a la place de free mais rien n'y change , il me libere toujours pas la memoire.
 
  for(int i=0;i<nbImages;i++)
  {
      delete  tabImage[i] ;
 
  }
  delete [] tabImage;
 
 
aurai-tu une autre solution svp .
 
Merci

Reply

Marsh Posté le 15-07-2005 à 15:20:15    

Reply

Marsh Posté le 15-07-2005 à 15:30:27    

NON, j'utilise FreeImage normal, pas FreeImage PLUS.
 
http://freeimage.sourceforge.net/index.html

Reply

Marsh Posté le 17-07-2005 à 16:30:47    

Avec quel outil vérifies-tu si la mémoire a été libérée ? Avec ce que je t'ai dit, a "solution" aurait plutôt du être la suivante :
 

Code :
  1. for(size_t i=0; i<nbImages; ++i)
  2.     FreeImage_Unload(tabImage[i]);
  3. delete [] tabImage;


 
Il faut absolument que tu gardes une cohérence entre fonctions d'allocation et de désallocation

Reply

Marsh Posté le 17-07-2005 à 17:41:54    

Je vien d'essayer la solution la, ais rien n'y fait, j'ai toujour l a memoire prise et elle ne descend pas.
 
Pour regarder la memoire prise j'utilise le gestionnaire de tache de windows xp. Le probleme c que je voudrai utiliser le programme plusieurs fois avec des grossse images, donc si je libere pas la memoire dans le prog, au bout d'un moment ca va swaper sur le disque dur et donc ralentir le programme.  
 
Par contre dès que je quitte le programme, la memoire descend et tout est bon....

Reply

Marsh Posté le 18-07-2005 à 07:34:14    

Ca ne veut pas forcément dire grand chose, le gestionnaire de tâches. ton prog peut tout à fait libérer la mémoire sans que ça se répercute immédiatement dans le gestionnaire. C'est parce que l'OS se "souvient" que tu es susceptible d'utiliser autant de mémoire que ce que tu as déjà alloué, alors tant qu'autre chose n'a pas besoin de la mémoire, celle affichée pour ton prog ne descendra pas systématiquement. C'est une indication pas très précise.

Reply

Marsh Posté le 18-07-2005 à 09:59:55    

ok , mais le pc swap quand meme apres , donc c que la memoire est utilisé ....

Reply

Marsh Posté le 18-07-2005 à 09:59:55   

Reply

Marsh Posté le 18-07-2005 à 10:19:13    

tu n'as pas de contrôle depuis ton application sur la gestion de la mémoire par ton OS :o
 
s'il swappe parce qu'il n'a pas libéré réellement la mémoire (supposant que ton application aura "sans doute" besoin de cette mémoire), tu n'y peux pas grand chose (et généralement, ce sera plutôt bénéfique, comme comportement)

Reply

Marsh Posté le 18-07-2005 à 13:36:40    

c possible, mais ca n'arrange pas mon probleme,, si  la memoire est completement utilisé ca rame beaucoup plus juqu'a saturé la memoire de swap...

Reply

Marsh Posté le 18-07-2005 à 14:09:26    

ben, quand tu réalloues de la mémoire, logiquement, ca utilisera en priorité celle que tu vois comme déjà attribuée au processus, donc sur une succession de traitement d'images, ca ne gênera pas

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed