Heim >Backend-Entwicklung >C++ >Wie erhält man unter Linux zuverlässig die C-Laufzeitspeichernutzung?
So erhalten Sie Informationen zur Speichernutzung zur Laufzeit mit C
Einführung
Überwachen der Speichernutzung ist entscheidend für die Optimierung der Programmleistung und die Vermeidung von Speicherlecks. In C kann das Erhalten von Echtzeitinformationen über den Speicherverbrauch für verschiedene Debugging- und Optimierungszwecke von entscheidender Bedeutung sein.
Problemstellung
Das OP hat versucht, getrusage() zu verwenden Abrufen der Speichernutzungsstatistiken (VIRT und RES) während der Programmausführung, aber stets auf Null gestoßen Werte.
Lösung
Auf Linux-Systemen kann das Abrufen der Speichernutzung über ioctl() eine Herausforderung sein. Ein zuverlässigerer Ansatz besteht stattdessen darin, auf Informationen aus Dateien in /proc/pid zuzugreifen. Das folgende C-Code-Snippet zeigt, wie dieser Ansatz implementiert wird:
#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; }
Verwendungsbeispiel
Sie können die Funktion „process_mem_usage()“ zum Anzeigen von Informationen zur Speichernutzung verwenden Schreiben Sie eine einfache Hauptfunktion wie folgt:
int main() { using std::cout; using std::endl; double vm, rss; process_mem_usage(vm, rss); cout << "VM: " << vm << "; RSS: " << rss << endl; }
Durch die Ausführung dieses Codes während der Programmausführung können Sie die Nutzung des virtuellen Speichers ermitteln (VM) und residente Satzgröße (RSS) zur Laufzeit.
Das obige ist der detaillierte Inhalt vonWie erhält man unter Linux zuverlässig die C-Laufzeitspeichernutzung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!