我使用C语言和Linux作为我的编程平台。
在我的应用中,我调用了pthread_create。然后我使用ps命令行工具检查我的应用程序的内存使用情况,并在VSZ列中添加4。
但问题是当pthread_create函数处理程序退出时,内存中添加的4不会释放。然后当应用程序再次调用pthread_create时,再次添加一个4值,直到它变大。
我尝试了pthread_join,似乎记忆力仍然越来越大。
感谢。
答案 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()例程不会关闭您可能在线程中打开的任何文件;即使在线程终止之后,线程内部打开的任何文件都将保持打开状态。