pthread_create内存泄漏

时间:2010-06-23 03:02:04

标签: c linux

我使用C语言和Linux作为我的编程平台。

在我的应用中,我调用了pthread_create。然后我使用ps命令行工具检查我的应用程序的内存使用情况,并在VSZ列中添加4。

但问题是当pthread_create函数处理程序退出时,内存中添加的4不会释放。然后当应用程序再次调用pthread_create时,再次添加一个4值,直到它变大。

我尝试了pthread_join,似乎记忆力仍然越来越大。

感谢。

3 个答案:

答案 0 :(得分:9)

ps不是测量内存泄漏的正确工具。当你释放内存时,你不能保证减少进程'vsize,这是由于内存碎片和避免不必要的系统调用。

valgrind是一种更好的工具。

答案 1 :(得分:6)

您应该在每个创建的pthread上使用pthread_detach或pthread_join(但不能同时使用两者)。 pthread_join等待线程完成; pthread_detach表示您不打算等待它(因此实现可以在终止时回收与该线程关联的存储空间)。

同样,Artelius所说的ps不是诊断内存泄漏的正确工具。

答案 2 :(得分:3)

当你说
时      但问题是当pthread_create函数处理程序退出

在完成线程执行后,您是否正在执行显式的pthread_exit(NULL)作为退出的一部分? 此外,pthread_exit()例程不会关闭您可能在线程中打开的任何文件;即使在线程终止之后,线程内部打开的任何文件都将保持打开状态。

相关问题