memory-management allocation - Comment obtenir l'utilisation de la mémoire sous Windows en C++




malloc dynamique (5)

J'essaie de savoir combien de mémoire ma demande utilise dans le programme lui-même. L'utilisation de la mémoire que je recherche est le nombre indiqué dans la colonne "Utilisation" de l'onglet Processus du Gestionnaire des tâches de Windows.


Answers

Pour compléter la réponse de Ronin, indead la fonction GlobalMemoryStatusEx vous donne les compteurs appropriés pour dériver l'utilisation de la mémoire virtuelle pour le processus appelant: il suffit de soustraire ullAvailVirtual de ullTotalVirtual pour obtenir la mémoire virtuelle allouée. Vous pouvez vérifier cela pour vous-même en utilisant ProcessExplorer ou quelque chose.

Il est déroutant que l'appel système GlobalMemoryStatusEx ait malheureusement un but mixte: il fournit à la fois des informations spécifiques au système et spécifiques au processus, par exemple des informations sur la mémoire virtuelle.


Je pense que c'est ce que 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);


}

Un bon point de départ serait GetProcessMemoryInfo , qui signale diverses informations de mémoire sur le processus spécifié. Vous pouvez passer GetCurrentProcess() tant que handle de processus afin d'obtenir des informations sur le processus appelant.

Probablement le membre WorkingSetSize de PROCESS_MEMORY_COUNTERS est la correspondance la plus proche du coulmn d'utilisation de Mem dans le gestionnaire de tâches, mais il ne sera pas exactement le même. J'expérimenterais les différentes valeurs pour trouver celle qui correspond le mieux à vos besoins.


GetProcessMemoryInfo est la fonction que vous recherchez. Les documents sur MSDN vous dirigeront dans la bonne direction. Obtenez les informations que vous voulez dans la structure PROCESS_MEMORY_COUNTERS que vous transmettez.

Vous devrez inclure psapi.h.






c++ windows memory-management