Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendapatkan Penggunaan Memori C Runtime dengan Amanah di 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!