54 votes

Comment utiliser la mémoire sous Windows en C ++

J'essaie de connaître la quantité de mémoire utilisée par mon application dans le programme même. L'utilisation de mémoire que je recherche est le nombre indiqué dans la colonne "Utilisation de la mémoire" de l'onglet Processus du Gestionnaire de tâches Windows.

53voto

Charlie Points 17807

Un bon point de départ serait GetProcessMemoryInfo, quels rapports différents de la mémoire d'infos sur le processus spécifié. Vous pouvez transmettre GetCurrentProcess() que le processus de poignée afin d'obtenir des informations sur le processus appelant.

Probablement l' WorkingSetSize membre de l' PROCESS_MEMORY_COUNTERS est le plus proche de la Mem Utilisation coulmn dans le gestionnaire des tâches, mais il ne va pas être exactement la même. Je voudrais expérimenter avec les différentes valeurs de trouver celui qui est le plus proche de vos besoins.

22voto

Ronin Points 386

Je pense que c'est la chose exacte, tu cherchais ::

 #include<windows.h>
#include<stdio.h>   
#include<tchar.h>

// Use to convert bytes to MB
#define DIV 1048576

// Use to convert bytes to MB
//#define DIV 1024

// Specify the width of the field in which to print the numbers. 
// The asterisk in the format specifier "%*I64d" takes an integer 
// argument and uses it to pad and right justify the number.

#define WIDTH 7

void _tmain()
{
  MEMORYSTATUSEX statex;

  statex.dwLength = sizeof (statex);

  GlobalMemoryStatusEx (&statex);


  _tprintf (TEXT("There is  %*ld percent of memory in use.\n"),WIDTH, statex.dwMemoryLoad);
  _tprintf (TEXT("There are %*I64d total Mbytes of physical memory.\n"),WIDTH,statex.ullTotalPhys/DIV);
  _tprintf (TEXT("There are %*I64d free Mbytes of physical memory.\n"),WIDTH, statex.ullAvailPhys/DIV);
  _tprintf (TEXT("There are %*I64d total Mbytes of paging file.\n"),WIDTH, statex.ullTotalPageFile/DIV);
  _tprintf (TEXT("There are %*I64d free Mbytes of paging file.\n"),WIDTH, statex.ullAvailPageFile/DIV);
  _tprintf (TEXT("There are %*I64d total Mbytes of virtual memory.\n"),WIDTH, statex.ullTotalVirtual/DIV);
  _tprintf (TEXT("There are %*I64d free Mbytes of virtual memory.\n"),WIDTH, statex.ullAvailVirtual/DIV);
  _tprintf (TEXT("There are %*I64d free Mbytes of extended memory.\n"),WIDTH, statex.ullAvailExtendedVirtual/DIV);


}
 

7voto

Mark Ransom Points 132545

Essayez de consulter GetProcessMemoryInfo . Je ne l'ai pas utilisé, mais cela ressemble à ce dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X