[C++] Comment récupérer La mémoire virtuelle occupée par un processus?

Comment récupérer La mémoire virtuelle occupée par un processus? [C++] - C++ - Programmation

Marsh Posté le 17-02-2011 à 17:21:18    

Hello,
 
Je travaille sur une application C++.
Celle-ci doit gérer sa mémoire virtuelle occupée (pour des raisons qui sont propres à l'application ;)).
 
Je n'ai trouvé aucun moyen d'interroger le système pour récupérer la quantité de mémoire virtuelle (et non la mémoire physique récupérable avec ::GetProcessMemoryInfo()) utilisée par un process donné (via le process id).
 
Les applications systinternals y arrivent, mais depuis que cela a été racheté par Microsoft, je n'ai pas trouvé les sources relatives à cette fonctionnalité.
 
Quelqu'un aurait il une piste ? Une solution ? Une commande dos ?
Je préfère éviter d'aller un exe externe pour avoir cette information.
 
Merci.


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 17-02-2011 à 17:21:18   

Reply

Marsh Posté le 17-02-2011 à 19:22:08    

Bonsoir,
C'est quoi pour toi la mémoire virtuelle occupée par un processus?


---------------
Seul Google le sait...
Reply

Marsh Posté le 18-02-2011 à 10:00:20    

On va faire plus simple, je souhaite récupérer la quantité de mémoire virtuelle (indiquée par le gestionnaire des tâches) dans une appli C++, pour un processus données.  
c'est ce que je souhaite récupérer ;).


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 18-02-2011 à 10:06:07    

http://msdn.microsoft.com/en-us/li [...] 85%29.aspx => tu scrolles jusqu'a "Virtual Memory Functions".

Reply

Marsh Posté le 18-02-2011 à 10:32:57    

ccp6128 a écrit :

http://msdn.microsoft.com/en-us/li [...] 85%29.aspx => tu scrolles jusqu'a "Virtual Memory Functions".


Merci mais je connaissais.
Ces méthodes donne le private byte et non la valeur en octet ou kilo etc ... de la mémoire virtuelle.
Ou je m'en sers mal.


Message édité par Clarkent le 18-02-2011 à 10:33:18

---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 18-02-2011 à 10:46:32    

Dans ce cas, tu devrais trouver des ressources plus détaillées la : http://www.hackchina.com/en/cont/140042
 
(le nom du site ne paie pas de mine, mais c'est l'équivalent d'un developpez.com en Chine). Y'a pas mal de sources en C++ liées à la gestion de la mémoire virtuelle).

Message cité 1 fois
Message édité par ccp6128 le 18-02-2011 à 10:47:25
Reply

Marsh Posté le 18-02-2011 à 12:51:53    

Clarkent a écrit :

On va faire plus simple, je souhaite récupérer la quantité de mémoire virtuelle (indiquée par le gestionnaire des tâches) dans une appli C++, pour un processus données.  
c'est ce que je souhaite récupérer ;).


Tu ne dis toujours pas c'est quoi pour toi la mémoire virtuelle!
En théorie c'est la mémoire totale adressable par un processus, elle est la même pour tous les processus d'un système, du style ~3G pour un programme 32 bit sur un syteme 32bit
Sinon je crois pas que le gestionnaire de tache indique la mémoire virtuelle (ou alors elle se résume a total RAM physique+pagefile!), et encore moins pour un processus donnée...
Sinon la quantité totale de mémoire utilisée pour un processus, c'est peut etre PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize + PROCESS_MEMORY_COUNTERS_EX.PagefileUsage ?
 
 MEMORYSTATUSEX.ullTotalVirtual est décrit comme: "The size of the user-mode portion of the virtual address space of the calling process, in bytes. This value depends on the type of process, the type of processor, and the configuration of the operating system. For example, this value is approximately 2 GB for most 32-bit processes on an x86 processor and approximately 3 GB for 32-bit processes that are large address aware running on a system with 4-gigabyte tuning enabled."
 
Après c'est peut être une combinaison de ces informations la qu'il te faut?


---------------
Seul Google le sait...
Reply

Marsh Posté le 18-02-2011 à 13:11:52    

ccp6128 a écrit :

Dans ce cas, tu devrais trouver des ressources plus détaillées la : http://www.hackchina.com/en/cont/140042
 
(le nom du site ne paie pas de mine, mais c'est l'équivalent d'un developpez.com en Chine). Y'a pas mal de sources en C++ liées à la gestion de la mémoire virtuelle).


 
Merci je vais étudier ces sources.
 

breizhbugs a écrit :


Tu ne dis toujours pas c'est quoi pour toi la mémoire virtuelle!
En théorie c'est la mémoire totale adressable par un processus, elle est la même pour tous les processus d'un système, du style ~3G pour un programme 32 bit sur un syteme 32bit
Sinon je crois pas que le gestionnaire de tache indique la mémoire virtuelle (ou alors elle se résume a total RAM physique+pagefile!), et encore moins pour un processus donnée...
Sinon la quantité totale de mémoire utilisée pour un processus, c'est peut etre PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize + PROCESS_MEMORY_COUNTERS_EX.PagefileUsage ?
 
 MEMORYSTATUSEX.ullTotalVirtual est décrit comme: "The size of the user-mode portion of the virtual address space of the calling process, in bytes. This value depends on the type of process, the type of processor, and the configuration of the operating system. For example, this value is approximately 2 GB for most 32-bit processes on an x86 processor and approximately 3 GB for 32-bit processes that are large address aware running on a system with 4-gigabyte tuning enabled."
 
Après c'est peut être une combinaison de ces informations la qu'il te faut?


 
Je cherche à connaitre la valeur qu'indique le gestionnaire de tâche dans la colonne "taille MV", mais oui il s'agit, il me semble, d'une combinaison de plusieurs éléments. Dont un est private byte, mais nous allons orienter ces recherches vers une autre valeur (après avoir étudier les sources proposés par CCP6128), car la valeur retourner par le gestionnaire des tâches ne seraient qu'une approximation voir une simulation pour le cas de la taille de la MV.


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 18-02-2011 à 13:39:49    

Clarkent a écrit :


 
Je cherche à connaitre la valeur qu'indique le gestionnaire de tâche dans la colonne "taille MV"


Mmmmh je n'ai pas cette colonne...


---------------
Seul Google le sait...
Reply

Marsh Posté le 18-02-2011 à 13:50:34    

breizhbugs a écrit :


Mmmmh je n'ai pas cette colonne...


Tu as un windows dans quelle langue ?


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 18-02-2011 à 13:50:34   

Reply

Marsh Posté le 18-02-2011 à 14:29:05    

Bah français  :lol:  (w7 familial premium 64bits)
C'est dans quel onglet que tu as ça toi?


---------------
Seul Google le sait...
Reply

Marsh Posté le 18-02-2011 à 15:07:38    

Je parlais de XP ;).
Je vois en effet que ça n'est pas présent sous 7.
Ce qui va peut être dans le sens que la taille MV indiquée sous XP ne correspondait pas à grand chose.
Et on se retrouvé avec la plage de travail ou jeu de travail privée.

Message cité 1 fois
Message édité par Clarkent le 18-02-2011 à 15:08:22

---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 22-03-2011 à 10:06:39    

Clarkent a écrit :

Je parlais de XP ;).
Je vois en effet que ça n'est pas présent sous 7.
Ce qui va peut être dans le sens que la taille MV indiquée sous XP ne correspondait pas à grand chose.
Et on se retrouvé avec la plage de travail ou jeu de travail privée.


 
Bonjour,
J'ai exactement la même question, as tu pu trouver une solution finalement?!!

Reply

Marsh Posté le 02-04-2011 à 11:01:50    

jul_rantan a écrit :


 
Bonjour,
J'ai exactement la même question, as tu pu trouver une solution finalement?!!


Après quelques recherches, et surtout quelques observations entre le gestionnaire de tâche de windows et processXP, il semble que la valeur indiquée en tant que mémoire virtuelle dans le gestionnaire de tâche corresponde à "private byte" de processXP.
Et pour récupérer la valeur "private byte" tu as des structures disponibles en C++.
Tu devrais pouvoir trouver les méthodes sur le msdn ou via google ;), mais je n'ai pas l'info sur moi.


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed