Linux में C++ प्रोग्राम का रनटाइम मेमोरी उपयोग (वर्चुअल मेमोरी, रेजिडेंट सेट साइज) प्राप्त करने के लिए /proc/self/stat या /proc/self/status फाइल पढ़ें।
विधि 1: /proc/self/stat पार्स करना
#include <iostream>
#include <fstream>
#include <string>
#include <unistd.h>
using namespace std;
void getMemoryUsage(double &vmUsageKB, double &rssKB) {
vmUsageKB = 0.0;
rssKB = 0.0;
ifstream stat("/proc/self/stat");
if (!stat) return;
// /proc/self/stat फॉर्मेट पार्स करें
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 >> 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.close();
long pageSizeKB = sysconf(_SC_PAGE_SIZE) / 1024; // आमतौर पर 4 KB
vmUsageKB = vsize / 1024.0; // बाइट्स से KB में
rssKB = rss * pageSizeKB; // पेजेस से KB में
}
int main() {
double vm, rss;
getMemoryUsage(vm, rss);
cout << "Virtual Memory (VSZ): " << vm << " KB\n";
cout << "Resident Set Size (RSS): " << rss << " KB\n";
cout << "Virtual Memory: " << (vm / 1024.0) << " MB\n";
cout << "RSS: " << (rss / 1024.0) << " MB\n";
// मेमोरी आवंटित करके टेस्ट करें
cout << "\nAllocating 10 MB...\n";
int *bigArray = new int[10 * 1024 * 1024 / sizeof(int)];
for (int i = 0; i < 10 * 1024 * 1024 / sizeof(int); i++) bigArray[i] = i;
getMemoryUsage(vm, rss);
cout << "After allocation:\n";
cout << "Virtual Memory: " << (vm / 1024.0) << " MB\n";
cout << "RSS: " << (rss / 1024.0) << " MB\n";
delete[] bigArray;
return 0;
}
आउटपुट
Virtual Memory (VSZ): 13272 KB Resident Set Size (RSS): 1548 KB Virtual Memory: 12.96 MB RSS: 1.51 MB Allocating 10 MB... After allocation: Virtual Memory: 23.0 MB RSS: 11.5 MB
विधि 2: /proc/self/status (पढ़ने में आसान)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void printMemoryStatus() {
ifstream status("/proc/self/status");
string line;
while (getline(status, line)) {
if (line.rfind("VmSize:", 0) == 0 || // वर्चुअल मेमोरी
line.rfind("VmRSS:", 0) == 0 || // रेजिडेंट सेट साइज
line.rfind("VmPeak:", 0) == 0 || // पीक वर्चुअल मेमोरी
line.rfind("VmHWM:", 0) == 0) { // पीक RSS
cout << line << endl;
}
}
}
int main() {
printMemoryStatus();
return 0;
}
आउटपुट
VmPeak: 13272 kB VmSize: 13272 kB VmHWM: 1548 kB VmRSS: 1548 kB
मुख्य मीट्रिक्स
- VmSize (VSZ): कुल वर्चुअल एड्रेस स्पेस
- VmRSS: फिजिकल रैम में वास्तव में उपयोग की गई मेमोरी
- VmPeak: पीक वर्चुअल मेमोरी उपयोग
- VmHWM: पीक RSS (हाई वॉटर मार्क)
नोट: यह Linux-विशिष्ट है। क्रॉस-प्लेटफॉर्म के लिए mallinfo() (malloc) या प्लेटफॉर्म-विशिष्ट APIs उपयोग करें।