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

 


Dernière réponse
Sujet : place mémoire dispo en C++
z51 Ah oui en effet !! Bien vu !

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
z51 Ah oui en effet !! Bien vu !
BifaceMcLeOD

darthbob a écrit a écrit :

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)




Je viens de réaliser ton erreur... L'unité ici est l'octet, pas le kilooctet! Ca veut dire qu'il reste (oui, oui) 8 kilooctets de libre !!!  
Ce qui devient cohérent avec les 100 % d'utilisation.

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 a écrit a écrit :

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 ?




Pour le C++, tu utilise ta mémoire RAM, les variables ne prennent pas grand chose: exemple variable de type int= 2 octets

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 !
 

 


--Message édité par darthbob--

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

coldcat a écrit a écrit :

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.




 
Bof y'a plus crade encore tu alloue une zone de la taille voulue
tab = new sizeof(char[taille voulue]) approx
puis tu ne libere pas mais tu ecris dans cette zone...
Il n'y a plus qu'une seule allocation memoire...

BifaceMcLeOD

darthbob a écrit a écrit :

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




Ca, par contre, tu ne pourras jamais le contrôler... car tu ne sais pas ce qui tourne à côté de ton programme, et qui a également besoin de mémoire comme lui. Donc ce n'est pas parce qu'à un moment donné, 60 Mo de RAM sont disponibles, que, si ton programme en prend 50, une partie de celle-ci ne sera pas elle-même swappée.
 
Par contre, si tu peux modifier ton algorithme, je te conseille de lui faire traiter des petits blocs de mémoire plutôt que de balayer de grandes zones de mémoire. C'est une optimisation très efficace même si au final on doit utiliser plus de mémoire. Car dans un cas, les petits blocs tiennent dans la mémoire cache du processeur alors que dans le second cas, le cache processeur ne sert quasiment à rien.
 
Pour donner un exemple, le programme SETI@home a été optimisé ainsi, et, avec une consommation globale de mémoire augmentée de 4%, le temps d'exécution du programme a pu être réduit d'environ 60 à 70% ! (et en plus, l'échauffement du processeur a été largement réduit lui aussi, mais ça, c'est ce qu'on appelle la cerise sur le gâteau).

 

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

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)