Maison >développement back-end >C++ >Comment puis-je récupérer avec précision l'utilisation de la mémoire d'exécution d'un programme C sous Linux ?

Comment puis-je récupérer avec précision l'utilisation de la mémoire d'exécution d'un programme C sous Linux ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 09:34:14299parcourir

How Can I Accurately Retrieve a C   Program's Runtime Memory Usage on Linux?

Récupération de l'utilisation de la mémoire d'exécution en C avec /proc/pid

En C, obtenir des informations sur l'utilisation de la mémoire d'un programme au moment de l'exécution peut être difficile . Malgré les tentatives utilisant getrusage(), l'affiche rencontrait systématiquement des valeurs nulles. Il existe une approche alternative qui consiste à interroger les fichiers dans le répertoire /proc/pid.

Sur les systèmes Linux, /proc/pid contient des informations spécifiques au processus, y compris l'utilisation de la mémoire. L'un des fichiers les plus fiables à cet effet est /proc/self/stat. En analysant ce fichier, nous pouvons extraire les champs suivants :

  • vsize : taille de la mémoire virtuelle du programme en kilo-octets (Ko)
  • rss : taille de l'ensemble résident du programme en Ko (quantité de mémoire physique mémoire actuellement utilisée)

Pour récupérer ces valeurs, nous pouvons utiliser la méthode process_mem_usage() function :

void process_mem_usage(double& vm_usage, double& resident_set)
{
    // Parse /proc/self/stat
    ifstream stat_stream("/proc/self/stat");
    stat_stream >> ... >> vsize >> rss;
    stat_stream.close();

    // Convert to KB
    long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024;
    vm_usage     = vsize / 1024.0;
    resident_set = rss * page_size_kb;
}

Dans notre fonction main(), nous pouvons utiliser process_mem_usage() pour imprimer l'utilisation de la mémoire virtuelle et la taille de l'ensemble résident :

int main()
{
    double vm, rss;
    process_mem_usage(vm, rss);
    cout <p>En utilisant cette approche, nous pouvons obtenir avec précision les informations sur l'utilisation de la mémoire du programme en cours au moment de l'exécution.</p>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn