我使用C语言和Linux作为我的编程平台。
在我的应用程序中,我调用了pthread_create。 然后我使用ps命令行工具检查我的应用程序的内存使用情况,并在VSZ列中添加了4。
但问题是当pthread_create函数处理程序退出时,内存中添加的4不是释放。 然后,当应用程序再次调用pthread_create时,会再次添加一个4值,直到它变大。
我尝试了pthread_join,它似乎仍然越来越大。
谢谢。
ps
不是测量内存泄漏的正确工具。 当你释放内存时,你不能保证减少进程的'vsize',这是由于内存碎片和避免不必要的系统调用。
valgrind
是一个更好的使用工具。
您应该在创建的每个pthread上使用pthread_detach或pthread_join(但不能同时使用)。 pthread_join等待线程完成; pthread_detach表明你不打算等待它(因此实现可以在线程终止时自由回收与线程相关的存储)。
同样,Artelius所说的ps不是诊断内存泄漏的正确工具。
当你说
但问题是当pthread_create函数处理程序退出时
在完成线程执行之后,你是否正在执行显式的pthread_exit(NULL)作为退出的一部分? 此外,pthread_exit()例程不会关闭您可能在您的线程中打开的任何文件; 即使在线程终止之后,线程内部打开的任何文件都将保持打开状态。