Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memantau Penggunaan Memori Program C (VIRT dan RES) dengan Cekap pada Runtime?

Bagaimanakah Saya Boleh Memantau Penggunaan Memori Program C (VIRT dan RES) dengan Cekap pada Runtime?

Susan Sarandon
Susan Sarandonasal
2024-12-05 21:22:10694semak imbas

How Can I Efficiently Monitor C   Program Memory Usage (VIRT and RES) at Runtime?

Menggunakan C untuk Mendapatkan Penggunaan Memori pada Masa Jalan

Artikel ini menyiasat cara mendapatkan maklumat penggunaan memori, khususnya VIRT dan RES, pada masa jalan dalam C .

Mencuba Pendekatan dan Cabaran

Percubaan untuk menggunakan fungsi getrusage untuk mendapatkan semula data ini menghasilkan hasil sifar secara konsisten.

Pendekatan Alternatif Menggunakan Fail /proc

Untuk sistem Linux, membaca data daripada fail "/proc/pid" menawarkan alternatif yang boleh dipercayai kepada ioctl(). Berikut ialah coretan dengan binaan C yang menunjukkan pendekatan ini:

#include <unistd.h>
#include <ios>
#include <iostream>
#include <fstream>
#include <string>

void process_mem_usage(double& vm_usage, double& resident_set)
{
    vm_usage = 0.0;
    resident_set = 0.0;

    ifstream stat_stream("/proc/self/stat", ios_base::in);
    
    string vsize, rss;
    stat_stream >> vsize >> rss;
    stat_stream.close();

    long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024;
    vm_usage = stod(vsize) / 1024.0;
    resident_set = stod(rss) * page_size_kb;
}

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memantau Penggunaan Memori Program C (VIRT dan RES) dengan Cekap pada Runtime?. 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