日期:2014-05-16  浏览次数:20597 次

为什么线程退出后空间不释放
开1个线程大概增加8m VSZ空间,关闭后基本不释放
开2个大概16m

若退出再开,仍然不会增加, 除非增加到3个线程同时开

C/C++ code


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了么,怎么又主动调一次