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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2057600
Clarkent
Musclor le shérif de l'espace
Posté le 17-02-2011 à 17:21:18  profilanswer
 

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".
mood
Publicité
Posté le 17-02-2011 à 17:21:18  profilanswer
 

n°2057616
breizhbugs
Posté le 17-02-2011 à 19:22:08  profilanswer
 

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


---------------
Seul Google le sait...
n°2057681
Clarkent
Musclor le shérif de l'espace
Posté le 18-02-2011 à 10:00:20  profilanswer
 

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".
n°2057686
ccp6128
Syntax error
Posté le 18-02-2011 à 10:06:07  profilanswer
 

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

n°2057693
Clarkent
Musclor le shérif de l'espace
Posté le 18-02-2011 à 10:32:57  profilanswer
 

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".
n°2057702
ccp6128
Syntax error
Posté le 18-02-2011 à 10:46:32  profilanswer
 

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
n°2057768
breizhbugs
Posté le 18-02-2011 à 12:51:53  profilanswer
 

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...
n°2057775
Clarkent
Musclor le shérif de l'espace
Posté le 18-02-2011 à 13:11:52  profilanswer
 

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".
n°2057780
breizhbugs
Posté le 18-02-2011 à 13:39:49  profilanswer
 

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...
n°2057782
Clarkent
Musclor le shérif de l'espace
Posté le 18-02-2011 à 13:50:34  profilanswer
 

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".
mood
Publicité
Posté le 18-02-2011 à 13:50:34  profilanswer
 

n°2057799
breizhbugs
Posté le 18-02-2011 à 14:29:05  profilanswer
 

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


---------------
Seul Google le sait...
n°2057819
Clarkent
Musclor le shérif de l'espace
Posté le 18-02-2011 à 15:07:38  profilanswer
 

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".
n°2065239
jul_rantan
Posté le 22-03-2011 à 10:06:39  profilanswer
 

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

n°2067647
Clarkent
Musclor le shérif de l'espace
Posté le 02-04-2011 à 11:01:50  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
Erreur dans l'appel d'une procédure stockée sous Visual C++ (6.0)[C#] Web service et message SOAP XML
[PYTHON] Module C++ pour pythonRecherche le titre d'un bouquin C++
Parser un flux XML en PHP pour récupérer une valeurRécupérer une variable Javascript avec AJAX
Programmation en C, besoin d'aideProblème C++ : Syntax error : missing ';'
Plus de sujets relatifs à : [C++] Comment récupérer La mémoire virtuelle occupée par un processus?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR