Heim > Backend-Entwicklung > C++ > Wie erhält man unter Linux zuverlässig die C-Laufzeitspeichernutzung?

Wie erhält man unter Linux zuverlässig die C-Laufzeitspeichernutzung?

Barbara Streisand
Freigeben: 2024-12-02 16:35:11
Original
355 Leute haben es durchsucht

How to Reliably Get C   Runtime Memory Usage on Linux?

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage