Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendapatkan Penggunaan Memori C Runtime dengan Amanah di Linux?

Bagaimana untuk Mendapatkan Penggunaan Memori C Runtime dengan Amanah di Linux?

Barbara Streisand
Barbara Streisandasal
2024-12-02 16:35:11353semak imbas

How to Reliably Get C   Runtime Memory Usage on Linux?

Cara Mendapatkan Maklumat Penggunaan Memori semasa Runtime Menggunakan C

Pengenalan

Memantau penggunaan memori adalah penting untuk mengoptimumkan prestasi program dan mencegah kebocoran memori. Dalam C , mendapatkan maklumat masa nyata tentang penggunaan memori boleh menjadi penting untuk pelbagai tujuan penyahpepijatan dan pengoptimuman.

Pernyataan Masalah

OP cuba menggunakan getrusage() untuk mendapatkan semula statistik penggunaan memori (VIRT dan RES) semasa pelaksanaan program tetapi secara konsisten menemui sifar nilai.

Penyelesaian

Pada sistem Linux, mendapatkan semula penggunaan memori melalui ioctl() boleh mencabar. Sebaliknya, pendekatan yang lebih dipercayai adalah untuk mengakses maklumat daripada fail dalam /proc/pid. Coretan kod C berikut menunjukkan cara untuk melaksanakan pendekatan ini:

#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;
}

Contoh Penggunaan

Untuk menggunakan fungsi process_mem_usage() untuk memaparkan maklumat penggunaan memori, anda boleh tulis fungsi utama yang mudah seperti berikut:

int main() {
  using std::cout;
  using std::endl;

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

Dengan menjalankan kod ini semasa program pelaksanaan, anda boleh mendapatkan penggunaan memori maya (VM) dan saiz set pemastautin (RSS) pada masa jalan.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Penggunaan Memori C Runtime dengan Amanah di Linux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn