2011-12-03 44 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 –