linux给函数指定一个内存,linux中查看C C++程序或调用其中某个函数(类)消耗内存的方法实现...

linux中查看C C++程序或调用其中某个函数(类)消耗内存的方法实现

DATA: 2018年05月22日 11:04:49

验证C/C++程序或调用其中某个函数(类)消耗内存的方法:

获取进程ID,调用/proc/[pid]/status查看消耗的内存页(4KB/内存页)

进程ID获取方法

UNIX环境高级编程中提到的getpid(),可以获取。 头文件

查看内存信息sprintf(FILE_NAME, "/proc/%d/statm", pid);

FILE *fp = fopen(FILE_NAME, "r");

fscanf(fp, "%lu %lu %lu %lu %lu %lu %lu", &result.size, &result.resident, &result.share, &result.text, &result.lib, &result.data, &result.dt);

附:代码代码来自参考1,已验证可用

在需要查看的地方调用void showMemStat(pid_t pid)即可。#include

#define FILE_NAME_SIZE 255

typedef struct {

unsigned long size, resident, share, text, lib, data, dt;

}statm_t;

statm_t get_statm(pid_t pid);

void showMemStat(pid_t pid);

void displayStatm(pid_t pid, statm_t statm);

statm_t get_statm(pid_t pid)

{

statm_t result = {0,0,0,0,0,0,0};

char FILE_NAME[FILE_NAME_SIZE] = "/proc/self/statm";

sprintf(FILE_NAME, "/proc/%d/statm", pid);

FILE *fp = fopen(FILE_NAME, "r");

fscanf(fp, "%lu %lu %lu %lu %lu %lu %lu", &result.size, &result.resident, &result.share, &result.text, &result.lib, &result.data, &result.dt);

fclose(fp);

return result;

}

void displayStatm(pid_t pid, statm_t statm)

{

printf("Process %d Memory Use:\n", pid);

printf("\t size \t resident \t share \t text \t lib \t data \t dt \n");

printf("==========================================================\n");

printf("\t %lu \t %lu \t\t %lu \t %lu \t %lu \t %lu \t %lu \n", statm.size, statm.resident, statm.share, statm.text, statm.lib, statm.data, statm.dt);

}

void showMemStat(pid_t pid)

{

statm_t statm = get_statm(pid);

displayStatm(pid, statm);

}

参考编写Linux C程序,程序在运行时,如何知道自身占用内存情况,就像top按PID所得的那样? - 静静的回答 - 知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值