在程序中使用malloc(大块)的内存,如果没有使用不会反应在res里面,只反应在virt中,可以测试一下:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <string>
using namespace std;
void* foo(void *)
{
char * a =(char *)malloc(1024*1024*5);
}
int main(int argc,char** agrv)
{
int i = 0;
pthread_t thread;
while(1)
{
if(i == 0)
sleep(20);
/*
if(i == 200)
break;
*/
if(i%10==0)
sleep(5);
if(pthread_create(&thread,NULL,foo,NULL)!=0)
{
printf("error:errno[%d],errinfo[%s]",errno,strerror(errno));
return 0;
}
i++;
printf("i = [%d]\n",i);
}
sleep(10000);
return 0;
}
然后使用top观察,我这里的栈大小是10M,故观察到virt以150m,增加,而res只是一几十字节增大。