为什么pthread_join后程序占用内存并没有释放干净

C语言 码拜 9年前 (2015-10-07) 860次浏览

程序中我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; 在线程没有终止的情况下,也可以创建多个线程啊?

方案推荐指数:20
如果是gcc的话,glibc会缓存住内存,不会立刻释放给系统

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么pthread_join后程序占用内存并没有释放干净
喜欢 (0)
[1034331897@qq.com]
分享 (0)