在Linux C++程序中获取进程占用内存、机器内存的方法:
#include <unistd.h> #include <cstring> #include <iostream> using namespace std; int get_memory_by_pid(pid_t pid) { FILE* fd; char line[1024] = {0}; char virtual_filename[32] = {0}; char vmrss_name[32] = {0}; int vmrss_num = 0; sprintf(virtual_filename, "/proc/%d/status", pid); fd = fopen(virtual_filename, "r"); if(fd == NULL) { cout << "open " << virtual_filename << " failed" << endl; exit(1); } // VMRSS line is uncertain for(int i = 0 ; i < 60; i++) { if(strstr(line, "VMRSS:") != NULL) { sscanf(line, "%s %d", vmrss_name, &vmrss_num); break; } } fclose(fd); return vmrss_num; } int get_machine_memory() { const char* virtual_filename = "/proc/meminfo"; FILE* fd; char line[1024] = {0}; fd = fopen(virtual_filename, "r"); if(fd == NULL) { cout << "open " << virtual_filename << " failed" << endl; exit(1); } char vmrss_name[32]; int machine_memory; fgets(line, sizeof(line), fd); sscanf(line, "%s %d", vmrss_name, &machine_memory); fclose(fd); return machine_memory; } int main() { cout << "The current process consumes " << get_memory_by_pid(getpid()) / 1024 << "MB memory" << endl; cout << "The machine memory: " << get_machine_memory() / 1024 << "MB memory" << endl; return 0; }