当前位置: 技术问答>linux和unix
为什么线程退出后空间不释放
来源: 互联网 发布时间:2017-01-17
本文导语: 开1个线程大概增加8m VSZ空间,关闭后基本不释放 开2个大概16m 若退出再开,仍然不会增加, 除非增加到3个线程同时开 pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_attr_sets...
开1个线程大概增加8m VSZ空间,关闭后基本不释放
开2个大概16m
若退出再开,仍然不会增加, 除非增加到3个线程同时开
线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}
开2个大概16m
若退出再开,仍然不会增加, 除非增加到3个线程同时开
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_attr_setstacksize(&attr, 2 * 1024 * 1024); //default:8m
if( pthread_create( &thread_id/*pClient->m_ClientThreadID*/, &pServer->m_pattrClient,
pClient->Shell, pClient ) != 0 )
线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}
|
我觉得由于线程是共享地址空间的,线程结束之后保留地址空间方便其他新建的线程使用,如果消除之后其他新的线程就得重新开辟地址空间,初始化一些和内存有关的数据结构,这样会导致线程的效率下降,和进程差别不大了。
|
pthread_attr_t attr
和
if( pthread_create( &thread_id/*pClient->m_ClientThreadID*/, &pServer->m_pattrClient,
pClient->Shell, pClient ) != 0 )
你没有attr啊,你用的m_pattrclient。
线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}
不是设置了detach了么,怎么又主动调一次
和
if( pthread_create( &thread_id/*pClient->m_ClientThreadID*/, &pServer->m_pattrClient,
pClient->Shell, pClient ) != 0 )
你没有attr啊,你用的m_pattrclient。
线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}
不是设置了detach了么,怎么又主动调一次