求助 linux 线程编程问题

发布于 2022-09-30 07:10:26 字数 3047 浏览 15 评论 0

写了一段应用程序,发现有内存泄漏。把程序分开测试,发现问题出在线程资源这一块,请各位大虾帮忙指点一二,最好能编译测试一下,我已经测试一个多星期了,就是没有找出原因,初学者,请多关照:)
/**************pthreadtest2.cpp ****************/
#include <stdio.h>
#include <iostream>
#include <vector>
#include <semaphore.h>
#include <pthread.h>
#include <sys/time.h>
#include <unistd.h>

using namespace std;

void* sendMsgs(void *arg)
{
        pthread_exit(NULL);
}

int main(void)
{
                sleep(30);       //此处用pmap 查看到mapped内存2280k
       
        unsigned int i = 0;       
               
                 //循环体内执行过程中通过pmap 查看到mapped内存14572k
        while( i < 65000)
        {
                i ++;
                int flag = 0;
                pthread_attr_t pthread_attr;
                pthread_attr_init(&pthread_attr);
                pthread_attr_setdetachstate(&pthread_attr,PTHREAD_CREATE_JOINABLE);                pthread_t threadSend;
                if( (flag = pthread_create(&threadSend,&pthread_attr,&sendMsgs,NULL) != 0 ) )
                {
                        cout << "create Error(threadSend):" << flag << endl;
                        break;
                }
               
                pthread_join(threadSend,NULL);
                pthread_attr_destroy(&pthread_attr);
        }       
       
        cout << "waiting ..." << endl;
        sleep(30);  //此处 mapped内存14572k
       
        return -1;
}

如果这个sendMsg内加入 string aa = "dfaaaaaadsfsd..."等等,那么内存吃得更多。
而且发现,吃掉内存的多少跟循环次数有关系,但不是线性关系;比如说循环1次和1000次他们吃掉的内存同样是6M左右,但是增加到某个数,一下就到了8M.
请各位帮忙测试测试,为什么会是这样的结果。

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

メ斷腸人バ 2022-10-07 07:10:26

你怎么知道你的程序有内存泄漏?

随遇而安 2022-10-07 07:10:26

用pmap查看进程内存 pmap pid
我在源程序中sleep的地方注释给出了我运行时的程序mapped内存的大小

微暖i 2022-10-07 07:10:26

不是内存泄露问题,原因是Linux上创建线程后,操作系统设定的线程堆栈的缺省大小是10M(RHELAs3.0 Later)或8M(RHELAs2.1)。可以修改系统的堆栈大小,或者修改线程堆栈大小。

爱,才寂寞 2022-10-07 07:10:26

你说的操作系统设定的线程堆栈的缺省大小是10M,这个我也看过相关资料。我的流程是主线程每次循环都在等待子线程的退出之后才继续循环的,循环结束之后难道线程的空间不会释放吗?

许仙没带伞 2022-10-07 07:10:26

原因可能调用了pthread_attr_setdetachstate(&pthread_attr,PTHREAD_CREATE_JOINABLE);  请删除这句话再试。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文