[C++] Mémoire dispo
Résolu
Salut à tous,
Je me demande comment faire pour détecter la quantité de mémoire (physique, donc RAM) disponible.
Mon problème, c'est que j'instancie des objets qui font parfois plusieurs centaines de Mb. Alors si la mémoire physique n'est pas suffisante, j'aimerais pouvoir sortir un message d'erreur plutôt qu'un programme qui cesse simplement de travailler (en fenêtre dos, il ne se passe rien quand on tente d'instancier des éléments trop gros...).
Quelqu'un a-t-il une idée ? Moi j'ai rien trouvé sur Google. Merci d'avance
O.55
Je me demande comment faire pour détecter la quantité de mémoire (physique, donc RAM) disponible.
Mon problème, c'est que j'instancie des objets qui font parfois plusieurs centaines de Mb. Alors si la mémoire physique n'est pas suffisante, j'aimerais pouvoir sortir un message d'erreur plutôt qu'un programme qui cesse simplement de travailler (en fenêtre dos, il ne se passe rien quand on tente d'instancier des éléments trop gros...).
Quelqu'un a-t-il une idée ? Moi j'ai rien trouvé sur Google. Merci d'avance
O.55
A voir également:
- [C++] Mémoire dispo
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Nettoyer memoire iphone - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
- Gmail memoire insuffisante - Guide
1 réponse
Version C
Il suffit de contrôler le code de retour de malloc/calloc.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/malloc.3.html
Ne pas oublier le free associé au malloc/calloc.
http://www.manpagez.com/missing.php
Version C++
Si tu fais des new je pense que si le PC n'arrive plus à allouer il retourne un pointeur NULL. Ne pas oublier le delete associé.
Donc il suffit de calquer le raisonnement sur celui des malloc. Si tu instancies directement ton objet sans passer par un new ou un malloc/calloc le programme plantera au moment d'allouer avec un message d'erreur genre std bad alloc. Tu peux essayer de la rattraper avec un try catch, je ne sais pas si ça marche :
Bonne chance
Il suffit de contrôler le code de retour de malloc/calloc.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/malloc.3.html
Ne pas oublier le free associé au malloc/calloc.
http://www.manpagez.com/missing.php
extern "C" { #include <stdlib.h> #include <stdio.h> } void f(){ char *plop = (char*)malloc(100000=sizeof(char)); if (!plop){ fprintf(stderr,"Pb allocation mémoire\n"); } // je manipule plop // ... // quand j'ai fini : free(plop); }
Version C++
Si tu fais des new je pense que si le PC n'arrive plus à allouer il retourne un pointeur NULL. Ne pas oublier le delete associé.
Donc il suffit de calquer le raisonnement sur celui des malloc. Si tu instancies directement ton objet sans passer par un new ou un malloc/calloc le programme plantera au moment d'allouer avec un message d'erreur genre std bad alloc. Tu peux essayer de la rattraper avec un try catch, je ne sais pas si ça marche :
#include <iostream> #include <vector> class gros_truc{ public: std::vector<double> plop; gros_truc(unsigned int i=0){ plop = std::vector<double>(i); } }; int main(){ gros_truc g; try{ g = gros_truc(10000000); }catch(...){ std::cerr << "Pb allocation memoire" << std::endl; } return 0; }
Bonne chance