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

  FORUM HardWare.fr
  Programmation
  C++

  FreeImage liberation memoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

FreeImage liberation memoire

n°1149373
squelletto​r
Posté le 13-07-2005 à 17:55:50  profilanswer
 

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!

mood
Publicité
Posté le 13-07-2005 à 17:55:50  profilanswer
 

n°1149378
theshockwa​ve
I work at a firm named Koslow
Posté le 13-07-2005 à 17:58:38  profilanswer
 

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
n°1149380
theshockwa​ve
I work at a firm named Koslow
Posté le 13-07-2005 à 18:01:01  profilanswer
 

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

n°1150468
squelletto​r
Posté le 15-07-2005 à 09:54:48  profilanswer
 

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

n°1150709
ToxicAveng​er
Posté le 15-07-2005 à 15:20:15  profilanswer
 
n°1150715
squelletto​r
Posté le 15-07-2005 à 15:30:27  profilanswer
 

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

n°1151817
theshockwa​ve
I work at a firm named Koslow
Posté le 17-07-2005 à 16:30:47  profilanswer
 

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

n°1151841
squelletto​r
Posté le 17-07-2005 à 17:41:54  profilanswer
 

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....

n°1152148
el muchach​o
Comfortably Numb
Posté le 18-07-2005 à 07:34:14  profilanswer
 

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.

n°1152210
squelletto​r
Posté le 18-07-2005 à 09:59:55  profilanswer
 

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

mood
Publicité
Posté le 18-07-2005 à 09:59:55  profilanswer
 

n°1152234
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2005 à 10:19:13  profilanswer
 

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)

n°1152471
squelletto​r
Posté le 18-07-2005 à 13:36:40  profilanswer
 

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...

n°1152491
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2005 à 14:09:26  profilanswer
 

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


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

  FreeImage liberation memoire

 

Sujets relatifs
Problème de mémoire...Probleme de mapping memoire[résolu]
Fonctions de la librarie FreeImagedébordement mémoire!
blanc de mémoireORACLE : occupation mémoire du varchar2
FreeImage[SGBD]Consommation memoire SQL SERVER 2000
Modifier document.cookie en memoire viveFreeImage et utilisation de BDE borland c++
Plus de sujets relatifs à : FreeImage liberation memoire


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