#1 Le 15/05/2007, à 10:56
- Takahani
C++ fonction pour connaitre la memoire libre
Bonjour,
Je recherche une focntion qui me permettrait de savoir combien il me reste de mémoire libre opur un programme en c++, vtk et fltk ...
C'est pour du traitement d'image, à un moment je construit un grand graphe qui me remplit facilement les 4 Go de RAM et du coup je dois procéder itérativement, mais j'aurai besoin de savoir combien de mémoire (RAM et non pas RAM+SWAP) il me reste à un instant pour définir la taille de ma fenêtre pour l'itération ...
Je sais pas si c'est très clair ce que j'écris, en gros j'aurai besoin d'une librairie en c++ (ou peux être d'une fonction std si ça existe) qui manage la mémoire et qui pourrai me donner :
int nFreeMemory = GetFreeMemoryNow();
Comme ça après je pourrais redéfinir la taille de mon graphe en fonction de la mémoire libre ...
Voila est ce que qqu'un a ça sous la main ?
PS : L'idéale serait une librairie cross-plateform car le programme tourne sous linux et wind**s
http://simon-in-china.over-blog.com
"Me voici professeur Thibault, qu'avez vous découvert ?"
Hors ligne
#2 Le 15/05/2007, à 15:38
- marc31
Re : C++ fonction pour connaitre la memoire libre
- les logiciels tels que "top", "vmstat" donne une information a ce sujet ;
- peut-etre tu pourrais regarder dans les /proc/* il y a certainement une info disponible ; le probleme est de savoir lire et exploiter ces infos.
- autre solution bourine : faire une boucle d'allocation et quand ca te rend null ou false, c'est que tu arrives au bout.
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#3 Le 15/05/2007, à 15:58
- Takahani
Re : C++ fonction pour connaitre la memoire libre
Yo ! Merci de ta réponse !
Alors effectivement j'ai fouillé un peu, et pour linux, j'ai trouvé une solution qui fonctionne :
#include <stdlib.h>
int main(int argc, char **argv)
{
system("free | grep \"cache:\"> mem.txt");
return 0;
}
Ce qui mécris dans un fichier la ligne suivante :
-/+ buffers/cache: 545632 3513488
Après je me débrouille avec ça pour chopper la valeur qui m'intéresse dans le fichier texte. Sous windows, c'est problématique ...
Sinon le coup de la boucle bourrine, j'y ai pensé, mais il faut que ce soit rapide, et en plus, il ne me renverra pas d'erreur si il peut allouer dans le swap, ce que je veux éviter !
Personne ne connait une petite librairie ou un .h qui traîne et qui test la mémoire disponible ?
Dernière modification par Takahani (Le 15/05/2007, à 15:59)
http://simon-in-china.over-blog.com
"Me voici professeur Thibault, qu'avez vous découvert ?"
Hors ligne
#4 Le 15/05/2007, à 16:04
- marc31
Re : C++ fonction pour connaitre la memoire libre
regarde aussi de ce cote, c'est a mon avis plus adapté : cat /proc/meminfo
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#5 Le 15/05/2007, à 16:07
- marc31
Re : C++ fonction pour connaitre la memoire libre
Sinon le coup de la boucle bourrine, j'y ai pensé, mais il faut que ce soit rapide, et en plus, il ne me renverra pas d'erreur si il peut allouer dans le swap, ce que je veux éviter !
je pense que c'est parfaitement utopique. Ce n'est pas concevable du tout sur plateforme Unix. Quand tu fais des allocations, tu pioches dans le TAS, et le noyau est libre de te donner ce qu'il a envie, a moins que tu ne fasses appel a des appels de plus bas niveau ; mais le simple malloc ne pourras rien pour toi. Et rien ne peut te garantir qu'une partie de la mémoire ne soit pas swapée quelques instant plus tard.
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#6 Le 15/05/2007, à 16:13
- Takahani
Re : C++ fonction pour connaitre la memoire libre
C'est bien ça mon souci Bah du coup je vais me contenter de ma bidouille, et sous windows, bah heu ...
http://simon-in-china.over-blog.com
"Me voici professeur Thibault, qu'avez vous découvert ?"
Hors ligne