| |||||
| Dernière réponse | |
|---|---|
| Sujet : place mémoire dispo en C++ | |
| z51 | Ah oui en effet !! Bien vu ! |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| z51 | Ah oui en effet !! Bien vu ! |
| BifaceMcLeOD |
|
| BifaceMcLeOD | darthbob> Ca me rappelle un appel hot-line d'un utilisateur de Windows 3 peu après que cette version soit sortie. Le type disait "quand j'ouvre la boite de dialogue "A propos" du gestionnaire de programmes, il me dit "Mémoire disponible: 7 Mo". Mais j'en n'ai que 4, il ne marche pas, votre truc !!!". La réponse du support technique fut "Bienvenue dans le monde merveilleux de la mémoire virtuelle..."
Tout ça pour dire qu'il n'y a pas vraiment moyen de distinguer mémoire réelle et mémoire swappée. L'adressage de la mémoire swappée est même gérée au niveau du processeur !!!! Et Windows, lorsqu'il prend "possession" de la machine, alloue toujours presque toute la mémoire disponible, quelle que soit la quantité de mémoire qu'il utilise réellement (et quelle qu'en soit la quantité disponible). Et c'est Windows qui, ensuite, distribue la mémoire aux applications. Tu peux mettre 1 giga ou 2 gigas de mémoire dans ton PC, tu n'auras toujours que 8 ou 16 kilooctets de mémoire libre sous Windows. Et de toute façon, ton programme ne pourra jamais utiliser ceux-là, puisqu'il passera toujours par Windows pour allouer de la mémoire ! Moralité : oublie, et repose sur ce que sait faire l'OS. De toute façon, si ton programme tourne prioritairement, la mémoire qu'il utilise ne sera pas swappée, car l'OS swappe ce qu'il n'utilise pas. |
| canada |
|
| darthbob | z51 > 8 Mo restant c'est pas beaucoup, mais il est vrai que la machine qui fera tourner le prog disposera de 128 ou 256 Mo...
Je vais donc baser mon algo sur la valeur de dwAvailPhys. Merci !
|
| z51 | D'après tes chiffres il reste 8Mo de ram "physique" libre.
Le MemoryLoad est faux, je crois que ça vient de 95/98 ... Il indique aussi 2Go de mémoire virtuelle, ça tu peux le vérifier dans les paramètres de mémoire virtuelle de Windows. En principe donc tu peux tabuler sur 8Mo. En principe il les allouera dans la ram physique, mais BiFaceMcLeod a raison, tu ne peux pas en être sûr à 100% (sauf si tu fixes la taille du swap à zéro, mais alors le moindre débordement et Windows va râler ...) |
| darthbob | J'ai testé GlobalMemoryStatus qui fonctionne bien mais je ne sais pas trop comment interpréter ses résultats:
J'obtiens: dwMemoryLoad = 100 // percent of memory in use dwTotalPhys; = 66 195 456 // bytes of physical memory dwAvailPhys; = 8 192 // free physical memory bytes dwTotalPageFile; = 2 081 284 096 // bytes of paging file dwAvailPageFile; = 1 895 481 344 // free bytes of paging file dwTotalVirtual; = 2 143 289 344 // user bytes of address space dwAvailVirtual; = 1 972 109 312 // free user bytes Pourquoi 100% d'utilisation alors qu'il reste 8 Mo libre ? J'ai bien 64 Mo de RAM (66 195 456 octets) Comment savoir combien d'octets restent en mémoire RAM pour mon appli ??? Le paging file, il vaut mieux pas que je m'en serve... Est-ce vraiment 8 Mo ? |
| BENB |
|
| BifaceMcLeOD |
--Message édité par BifaceMcLeOD-- |
| z51 | eh bien ... GlobalMemoryStatus te donne ces infos justement :
mémoire physique totale = quantité de ram totale mémoire physique dispo = quantité de ram libre |
| darthbob | Merci pour les renseignements !
Je suis en Visual C++ sous Windows Nt (personne n'est parfait) Donc mon problème est de connaître la mémoire RAM car mon calcul doit tourner le plus rapidement possible et peut être très long... Il est donc interdit de swaper ! Si vous avez d'autres idées... |
| z51 | Sous Windows tu peux utiliser GlobalMemoryStatus avec en paramètre un MEMORYSTATUS.
T'auras des infos sur : - la mémoire physique : totale et dispo - la mémoire virtuelle : totale et dispo En principe (mais je peux me gourer, j'ai jamais essayé à vrai dire) tu peux allouer au max la quantité de mémoire virtuelle dispo. |
| ColdCat | Si tu veut connaitre la taille de la memoire encore disponible cela depend du système, et de tes droits ( car un admin peut limiter l'usage de la memoire).
Un truc simple mais crade multiplatforme en c++. Tu essaye d'allouer un tableau de la taille que tu a besoin, si ca passe tu le libère et tu continu, et sinon tu le libère et tu ne lance pas ton calcul. |
| la viper | si mes connaissances sont bonnes en variable locale tu peux avoir tous l'espace ram que tu veux.
pour les tableaux tu peux en faire autant que tu en veux en dynamique. .. 256 Mo de Donnée dans un tableau le pied :) lol |
| darthbob | Je voudrais savoir combien de mémoire est disponible pour allouer des variables...
Le but est de décider si je lance mon calcul ou pas (récursivité et tableaux dans tous les sens) Qui peut m'aider ? |




