2011-12-03 45 views
1

我已经使用Totalview的Memoryscape做一些内存泄漏检查,我有“没有”,至少没有在堆......但似乎像MemoryScape这样的工具只检查堆,而不是堆栈泄漏...检查POSIX THREAD堆栈上的内存泄漏的最佳方法是什么?

我注意到在AIX和Solaris上发生了一个小漏洞(任何可能的Linux,仍在检查)....并且试图追捕它。

我使用我的应用程序,所有的工作单(加入)螺纹...

请多多包涵,C是不是我的日常工作;-)但我有2个问题:

  • 如果我生成一个POSIX线程,它确实malloc的等...这些在堆或线程堆栈?当一个线程没有释放一个malloc时,一个内存检查(堆)工具通常会发现泄漏?

  • 您推荐使用什么工具来查找堆栈上的泄漏?我曾用“使用libumem” Solaris上的,但不知道这是找到我需要什么..

我可以或许用Valgrind的在Linux上,检查我的线程的堆栈泄漏?

感谢您的帮助;-)

林顿

+0

什么是堆栈泄漏? – Duck

+0

堆栈不能泄漏。 –

+0

除非他意味着他mallocs他正在使用的线程的堆栈空间。 – Duck

回答

3

如果我产卵的POSIX线程的和它的malloc的等等......这些都是在 堆或线程栈?内存检查(堆)工具 通常也会在线程未释放malloc时发现泄漏?

您通过malloc获得的所有内容,无论您在哪里调用它,都是从堆中获取的。内存调试器应该能够捕获泄漏。 Valgrind是一个很好的工具来查找泄漏,它应该与线程一起工作。

1

您不能在堆栈上发生“泄漏”。局部变量的技术术语是“自动变量”,一旦函数退出,它们就会被释放。

但是如果您有一个可连接的线程,但是您没有在线程句柄上明确调用pthread_join(),那么您可能发生泄漏。

+0

嗨,我已经做了线程句柄上的pthread_join()。 ..我想我很困惑,即使libumem和TotalView的MemoryScape什么也不说,我的应用程序似乎漏了... mmmm –