LINUX:检查当前进程内存占用的C代码
·
两种办法都可以,结果一样:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define PROCESS_STATM "/proc/self/statm"
#define PROCESS_STATUS "/proc/self/status"
void get_memory1(int* info)
{
FILE *file = fopen(PROCESS_STATM, "r");
if (!file) {
WY_LOG_INFO("Failed to open %s", PROCESS_STATM);
return;
}
long size, resident, share, text, lib, data, dt;
if (fscanf(file, "%ld %ld %ld %ld %ld %ld %ld",
&size, &resident, &share, &text, &lib, &data, &dt) != 7) {
fclose(file);
return;
}
fclose(file);
long page_size = sysconf(_SC_PAGESIZE)/1024; // 通常为4096字节
//物理内存(RSS), KB
info[0] = resident * page_size;
//虚拟内存, KB
info[1] = size * page_size;
//共享内存, KB
info[2] = share * page_size;
}
void get_memory2(int* info)
{
FILE *file = fopen(PROCESS_STATUS, "r");
if (!file) return;
char line[128];
while (fgets(line, sizeof(line), file)) {
if (strncmp(line, "VmRSS:", 6) == 0) { // 物理内存
//物理内存
info[0] = atoi(line + 6);
} else if (strncmp(line, "VmSize:", 7) == 0) { // 虚拟内存
//虚拟内存
info[1] = atoi(line + 7);
}
}
fclose(file);
}
更多推荐




所有评论(0)