/proc फाइलसिस्टम से मेमोरी जानकारी पढ़ना
लिनक्स में, हम /proc/self/stat फाइल से प्रक्रिया के बारे में सभी विवरण प्राप्त कर सकते हैं। यहां हम वर्चुअल मेमोरी आकार और रेजिडेंट सेट साइज (RSS) ले रहे हैं।
पूर्ण कार्यान्वयन
#include <unistd.h>
#include <ios>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void mem_usage(double& vm_usage, double& resident_set) {
vm_usage = 0.0;
resident_set = 0.0;
// /proc/self/stat से जानकारी प्राप्त करें
ifstream stat_stream("/proc/self/stat", ios_base::in);
// जानकारी प्राप्त करने के लिए वेरिएबल्स बनाएं
string pid, comm, state, ppid, pgrp, session, tty_nr;
string tpgid, flags, minflt, cminflt, majflt, cmajflt;
string utime, stime, cutime, cstime, priority, nice;
string O, itrealvalue, starttime;
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;
// बाकी की परवाह न करें
stat_stream.close();
// पेज साइज KB में (x86-64 पर आमतौर पर 4KB)
long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024;
// वर्चुअल मेमोरी साइज (KB में)
vm_usage = vsize / 1024.0;
// रेजिडेंट सेट साइज (KB में)
resident_set = rss * page_size_kb;
}
int main() {
double vm, rss;
mem_usage(vm, rss);
cout << "Virtual Memory: " << vm << " KB\n";
cout << "Resident set size: " << rss << " KB" << endl;
return 0;
}
आउटपुट
Virtual Memory: 13272 KB Resident set size: 1548 KB
फील्ड्स की व्याख्या
| फील्ड | विवरण |
|---|---|
vsize | वर्चुअल मेमोरी साइज (बाइट्स में) |
rss | रेजिडेंट सेट साइज (पेजेस की संख्या में) |
_SC_PAGE_SIZE | सिस्टम पेज साइज (बाइट्स में) |