Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में रनटाइम पर मेमोरी उपयोग प्राप्त करना (Linux)


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 उपयोग करें।

  1. OpenCV में C++ का उपयोग करके दीर्घवृत्त कैसे बनाएं? OpenCV में C++ का उपयोग करके दीर्घवृत्त कैसे बनाएं?

    दीर्घवृत्त बनाने के लिए, हमें एक केंद्र, प्रमुख अक्ष और लघु अक्ष की आवश्यकता होती है। इसका मतलब है कि हमें दीर्घवृत्त के लिए तीन पैरामीटर चाहिए। हमें एक मैट्रिक्स चाहिए जहां हम दीर्घवृत्त बनाएंगे, और हमें लाइन की मोटाई और लाइन का रंग घोषित करना होगा। जब हम OpenCV का उपयोग करके दीर्घवृत्त बनाना चाहते

  1. OpenCV में C++ का उपयोग करके रेखा कैसे बनाएं? OpenCV में C++ का उपयोग करके रेखा कैसे बनाएं?

    रेखा बनाने के लिए हमें दो बिंदुओं की आवश्यकता होती है - प्रारंभिक बिंदु और अंतिम बिंदु। हमें रेखा खींचने के लिए एक कैनवास की भी आवश्यकता होती है। OpenCV का उपयोग करके, मैट्रिक्स हमारा कैनवास है, हमें रेखा के प्रारंभिक और अंतिम बिंदुओं को परिभाषित करने की आवश्यकता होती है। हमें रेखा को एक रंग निर्दिष

  1. C++ प्रोग्राम का उपयोग करके प्रोग्राम कैसे लॉन्च करें? C++ प्रोग्राम का उपयोग करके प्रोग्राम कैसे लॉन्च करें?

    सिस्टम कमांड का उपयोग करके एप्लिकेशन लॉन्च करना यहां हम देखेंगे कि C++ प्रोग्राम का उपयोग करके नोटपैड जैसे किसी थर्ड-पार्टी एप्लिकेशन को कैसे शुरू किया जाए। यह प्रोग्राम बहुत सरल है; हम कमांड प्रॉम्प्ट कमांड का उपयोग करके यह कार्य कर सकते हैं। हम system() फ़ंक्शन के अंदर एप्लिकेशन नाम पास करेंगे। य