我已经使用Totalview的Memoryscape做一些内存泄漏检查,我有"无",至少没有在堆....但是像MemoryScape这样的工具似乎只检查堆,而不是堆栈泄漏…
我注意到AIX和Solaris上发生了一个小泄漏(任何可能是Linux,仍在检查)....我正在努力寻找它。
我确实在我的应用程序中使用一个(可接合的)线程来完成所有的工作…
请原谅我,C不是我的日常工作;-)但我有两个问题:
-
如果我生成一个POSIX线程,它做malloc等…它们是在堆上还是在线程堆栈上?当线程没有释放malloc时,内存检查(堆)工具通常也会发现泄漏吗?
-
您建议使用什么工具来查找STACK上的泄漏?我在Solaris上使用了"libumem",但不确定这是否找到了我需要的东西。
我可以在Linux上使用VALGRIND来检查线程堆栈上的泄漏吗?
谢谢你的帮助;-)
暗讽
如果我生成一个POSIX线程,它做malloc等…这些在吗?堆还是线程堆栈?内存检查(堆)工具当线程不释放malloc时,通常也会发现泄漏。
通过malloc
得到的所有东西,无论你从哪里调用它,都是从堆中得到的。内存调试器应该能够捕获泄漏。Valgrind是一个查找泄漏的好工具,它应该可以很好地处理线程。
不能在堆栈上出现"泄漏"。局部变量的专业术语是"自动变量",一旦函数退出,它们就会被释放。
但是如果你有一个可接合的线程,你可以有一个泄漏,但不显式地调用线程句柄上的pthread_join()