Maison >développement back-end >C++ >Comment puis-je surveiller l'utilisation de la mémoire d'un programme C sous Linux ?

Comment puis-je surveiller l'utilisation de la mémoire d'un programme C sous Linux ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-20 02:28:13690parcourir

How Can I Monitor a C   Program's Memory Usage in Linux?

Comment surveiller l'utilisation de la mémoire d'un programme en cours d'exécution en C

L'estimation de la consommation de mémoire pendant l'exécution est cruciale pour optimiser les performances des applications et prévenir les fuites de mémoire . C propose plusieurs approches pour récupérer des informations sur l'utilisation de la mémoire, répondant à des exigences spécifiques.

Une méthode fréquemment utilisée consiste à exploiter la fonction getrusage, qui récupère des données sur l'utilisation des ressources d'un processus. Cependant, dans certains cas, les utilisateurs rencontrent des difficultés à obtenir des résultats précis avec cette approche.

Solution alternative pour les environnements Linux

Pour les systèmes Linux, une stratégie alternative consiste à accéder aux fichiers contenus dans le répertoire /proc/pid. Chaque fichier présente diverses informations liées aux processus système. L'extrait de code suivant illustre comment obtenir à la fois la taille de la mémoire virtuelle (VM) et la taille de l'ensemble résident (RSS) en kilo-octets (Ko) :

#include <unistd.h>
#include <ios>
#include <iostream>
#include <fstream>
#include <string>

void process_mem_usage(double& vm_usage, double& resident_set) {
    std::ifstream stat_stream("/proc/self/stat", std::ios_base::in);

    unsigned long vsize;
    long rss;

    stat_stream >> vsize >> rss; // Skipping irrelevant fields

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

Exemple d'utilisation

Pour utiliser cette méthode, intégrez la fonction process_mem_usage dans votre programme et appelez-la pour récupérer la mémoire actuelle utilisation :

int main() {
    double vm, rss;
    process_mem_usage(vm, rss);
    std::cout << "VM: " << vm << "; RSS: " << rss << std::endl;
}

Cette approche fournit des estimations fiables de l'utilisation de la mémoire, complétant les limitations rencontrées avec d'autres méthodes.

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