Computer >> Máy Tính >  >> Lập trình >> C ++

Làm thế nào để sử dụng bộ nhớ trong thời gian chạy bằng C ++?

Chúng tôi có thể nhận được mức sử dụng bộ nhớ như sử dụng bộ nhớ ảo hoặc kích thước bộ thường trú, v.v. tại thời điểm chạy. Để có được chúng, chúng ta có thể sử dụng một số thư viện hệ thống. Quá trình này phụ thuộc vào hệ điều hành. Đối với ví dụ này, chúng tôi đang sử dụng hệ điều hành Linux.

Vì vậy, ở đây chúng ta sẽ xem cách lấy số liệu thống kê sử dụng bộ nhớ trong môi trường Linux bằng cách sử dụng C ++. Chúng tôi có thể lấy tất cả các chi tiết từ thư mục “/ proc / self / stat”. Ở đây chúng tôi đang lấy trạng thái bộ nhớ ảo và kích thước tập hợp thường trú.

Ví dụ

#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;
   ifstream stat_stream("/proc/self/stat",ios_base::in); //get info from proc
   directory
   //create some variables to get info
   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; // don't care
   about the rest
   stat_stream.close();
   long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; // for x86-64 is configured
   to use 2MB pages
   vm_usage = vsize / 1024.0;
   resident_set = rss * page_size_kb;
}
int main() {
   double vm, rss;
   mem_usage(vm, rss);
   cout << "Virtual Memory: " << vm << "\nResident set size: " << rss << endl;
}

Đầu ra

Virtual Memory: 13272
Resident set size: 1548