Comment obtenir des informations sur l'utilisation de la mémoire lors de l'exécution à l'aide de C
Introduction
Surveillance de l'utilisation de la mémoire est crucial pour optimiser les performances du programme et prévenir les fuites de mémoire. En C, obtenir des informations en temps réel sur la consommation de mémoire peut être essentiel à diverses fins de débogage et d'optimisation.
Énoncé du problème
L'OP a tenté d'utiliser getrusage() pour récupérer les statistiques d'utilisation de la mémoire (VIRT et RES) pendant l'exécution du programme mais rencontrer systématiquement zéro valeurs.
Solution
Sur les systèmes Linux, récupérer l'utilisation de la mémoire via ioctl() peut être difficile. Au lieu de cela, une approche plus fiable consiste à accéder aux informations à partir des fichiers dans /proc/pid. L'extrait de code C suivant montre comment implémenter cette approche :
#include <unistd.h> #include <ios> #include <iostream> #include <fstream> #include <string> void process_mem_usage(double& vm_usage, double& resident_set) { using namespace std; ifstream stat_stream("/proc/self/stat", ios_base::in); // Ignore irrelevant fields string pid, comm, state, ppid, pgrp, session, tty_nr, tpgid, flags, minflt, cminflt, majflt, cmajflt; string utime, stime, cutime, cstime, priority, nice, O, itrealvalue, starttime; // Read desired fields unsigned long vsize; long rss; stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt >> utime >> stime >> cutime >> cstime >> priority >> nice >> O >> itrealvalue >> starttime >> vsize >> rss; // Ignore rest stat_stream.close(); // Convert values to KB 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 la fonction process_mem_usage() pour afficher les informations sur l'utilisation de la mémoire, vous pouvez écrivez une fonction principale simple comme suit :
int main() { using std::cout; using std::endl; double vm, rss; process_mem_usage(vm, rss); cout << "VM: " << vm << "; RSS: " << rss << endl; }
En exécutant ce code pendant l'exécution du programme, vous pouvez obtenir l'utilisation de la mémoire virtuelle (VM) et taille de l'ensemble résident (RSS) au moment de l'exécution.
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!