进程XXX占用了多少内存?这是个经常被问到,也经常被答错的问题。Linux进程的内存分配是个比较复杂的话题,而Linux上的工具往往把这个问题过分简单化,因此引出不少误解和困惑。首先把ps, top这类工具扔掉,然后看这么一个简单程序:
[root@pczou pczou]# cat ./prog.c
#include
#include
#include
#include
#define ONEM (1024*1024)
int func()
{
char s[16*ONEM];
char* p;
p = malloc(32*ONEM);
pause();
return 0;
}
int main()
{
printf("pid: %d\n", getpid());
func();
return 0;
}
其中func()这个函数分配了32MB的内存,以及16MB的堆栈。
原文见:http://pczou.bokee.com/5944730.html
每个进程在/proc目录下都有一个以进程号命名的目录.
在该目录下有exe@文件,该文件是一个链接(应该是软链接)文件,它指向的路径就是该进程的全路径.用readlink函数读exe@文件返回该进程的全路径.
使用Linux系统下的性能管理器,很直观!