为何pthread_join后程序占用内存并没有释放干净
为什么pthread_join后程序占用内存并没有释放干净
程序中我pthread_create()创建了一个线程,然后pthread_join()后,理论来说是应该全部释放了吧,但是我用top看内存占用发现创建线程占用的几M堆栈空间并没有减少,这是为什么啊?
例如这段代码,例如,我程序刚开始运行的时候内存占用2m,pthread_create后内存占用变成了10M,然后pthread_join释放后,内存占用依旧是10M,并没有变化,但是,再次创建线程的时候,内存占用也没有增大,这是为什么?
另外,为什么同一个pthread_t id; 在线程没有终止的情况下,也可以创建多个线程啊?
------解决思路----------------------
如果是gcc的话,glibc会缓存住内存,不会立刻释放给系统
程序中我pthread_create()创建了一个线程,然后pthread_join()后,理论来说是应该全部释放了吧,但是我用top看内存占用发现创建线程占用的几M堆栈空间并没有减少,这是为什么啊?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_t id;
void * thread_1(void *arg)
{
pthread_exit(0);
}
int main()
{
int i ;
sleep(10);
for ( i = 0; i < 100; i++)
{
pthread_create(&id, NULL, thread_1, NULL);
// pthread_detach(id);
usleep(10000);
pthread_join(id, 0);
}
printf("father sleep 5\n");
sleep(5);
}
例如这段代码,例如,我程序刚开始运行的时候内存占用2m,pthread_create后内存占用变成了10M,然后pthread_join释放后,内存占用依旧是10M,并没有变化,但是,再次创建线程的时候,内存占用也没有增大,这是为什么?
另外,为什么同一个pthread_t id; 在线程没有终止的情况下,也可以创建多个线程啊?
------解决思路----------------------
如果是gcc的话,glibc会缓存住内存,不会立刻释放给系统