c检查POSIX THREAD堆栈上的内存泄漏的最佳方法?



我已经使用Totalview的Memoryscape做一些内存泄漏检查,我有"无",至少没有在堆....但是像MemoryScape这样的工具似乎只检查堆,而不是堆栈泄漏…

我注意到AIX和Solaris上发生了一个小泄漏(任何可能是Linux,仍在检查)....我正在努力寻找它。

我确实在我的应用程序中使用一个(可接合的)线程来完成所有的工作…

请原谅我,C不是我的日常工作;-)但我有两个问题:

  • 如果我生成一个POSIX线程,它做malloc等…它们是在堆上还是在线程堆栈上?当线程没有释放malloc时,内存检查(堆)工具通常也会发现泄漏吗?

  • 您建议使用什么工具来查找STACK上的泄漏?我在Solaris上使用了"libumem",但不确定这是否找到了我需要的东西。

我可以在Linux上使用VALGRIND来检查线程堆栈上的泄漏吗?

谢谢你的帮助;-)

暗讽

如果我生成一个POSIX线程,它做malloc等…这些在吗?堆还是线程堆栈?内存检查(堆)工具当线程不释放malloc时,通常也会发现泄漏。

通过malloc得到的所有东西,无论你从哪里调用它,都是从堆中得到的。内存调试器应该能够捕获泄漏。Valgrind是一个查找泄漏的好工具,它应该可以很好地处理线程。

不能在堆栈上出现"泄漏"。局部变量的专业术语是"自动变量",一旦函数退出,它们就会被释放。

但是如果你有一个可接合的线程,你可以有一个泄漏,但不显式地调用线程句柄上的pthread_join()