我如何知道使用的内存量。 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;
}
答案 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
。