C를 사용하여 런타임 시 메모리 사용량 정보를 얻는 방법
소개
메모리 사용량 모니터링 프로그램 성능을 최적화하고 메모리 누수를 방지하는 데 중요합니다. C에서는 다양한 디버깅 및 최적화 목적을 위해 메모리 소비에 대한 실시간 정보를 얻는 것이 필수적일 수 있습니다.
문제 설명
OP는 getrusage()를 활용하여 프로그램 실행 중에 메모리 사용량 통계(VIRT 및 RES)를 검색했지만 지속적으로 0이 발생했습니다. 값.
해결책
Linux 시스템에서는 ioctl()을 통해 메모리 사용량을 검색하는 것이 어려울 수 있습니다. 대신, 보다 안정적인 접근 방식은 /proc/pid 내의 파일에서 정보에 액세스하는 것입니다. 다음 C 코드 조각은 이 접근 방식을 구현하는 방법을 보여줍니다.
#include <unistd.h> #include <ios> #include <iostream> #include <fstream> #include <string> void process_mem_usage(double& vm_usage, double& resident_set) { using namespace std; ifstream stat_stream("/proc/self/stat", ios_base::in); // Ignore irrelevant fields string pid, comm, state, ppid, pgrp, session, tty_nr, tpgid, flags, minflt, cminflt, majflt, cmajflt; string utime, stime, cutime, cstime, priority, nice, O, itrealvalue, starttime; // Read desired fields 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; // Ignore rest stat_stream.close(); // Convert values to KB long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; vm_usage = vsize / 1024.0; resident_set = rss * page_size_kb; }
사용 예
메모리 사용량 정보를 표시하기 위해 process_mem_usage() 함수를 활용하려면 다음을 수행할 수 있습니다. 다음과 같이 간단한 main 함수를 작성합니다.
int main() { using std::cout; using std::endl; double vm, rss; process_mem_usage(vm, rss); cout << "VM: " << vm << "; RSS: " << rss << endl; }
프로그램 중에 이 코드를 실행하여 실행하면 런타임에 가상 메모리 사용량(VM)과 상주 세트 크기(RSS)를 얻을 수 있습니다.
위 내용은 Linux에서 C 런타임 메모리 사용량을 안정적으로 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!