c程序计算系统的内存使用量?

时间:2015-07-16 08:02:52

标签: c linux memory

我如何知道使用的内存量。 RAM用法?

int main()
{
  int i=0;
  for(i=0;i<100;i++)
     {
        printf("%d\n",i);
     }
return 0;
}

我想编写一个代码来计算这个程序使用的内存量。可能就像 -

int main()
{
  int i=0;
  for(i=0;i<100;i++)
     {
        printf("%d\n",i);
     }
  printf("Amount of memory consumed=%f",SOME_FUNCTION());
return 0;
}

3 个答案:

答案 0 :(得分:1)

一种简单的方法是为内存分配和释放创建一个包装函数,并调用包装器并将内存使用信息放入其中。这只能用于动态内存分配。 e.g

#define ALLOC 1
#define FREE 2
mem_op(void * pointer,int size,int operation)
{
    switch(operation)
    {
        static int mem_used;
        case ALLOC:
            // call malloc or alloc
            mem_used = mem_used+size;
            break;

        case FREE:
            // call free
            mem_used = mem_used-size;
            break;
    }

答案 1 :(得分:1)

getrusage系统调用将返回当前进程的一些信息,其中包括&#34;驻留集大小&#34;:

struct rusage usage;

if (!getrusage(RUSAGE_SELF, &usage)) {
    printf("Maximum resident set size (KB): %ld\n", usage.ru_maxrss);
} else {
    perror("getrusage");
}

此大小等于物理连接到进程的内存量,而不是虚拟地址空间的整个大小,其中一部分可能被分页或从未加载。

答案 2 :(得分:1)

检查程序在Linux系统上使用的内存并不容易。但您最想检查的是/proc/[pid]/status(或/proc/[pid]/statm的第二列)中VmRSS的值。 VmRSS(&#34;驻留集大小&#34;)是您的进程当前使用的内存量。

除此之外,您可能会对来自/proc/[pid]/status(或/proc/[pid]/statm的第一列)的VmSize感兴趣。这是您的进程使用的总内存,包括内存换出,共享库使用的内存,内存映射资源(通常不会消耗真正的RAM)。

要获取流程的PID,请使用getpid()。在您的流程中,您还可以查看/proc/self/status