【问题标题】:Best way to check for Memory LEAKS on POSIX THREAD's STACK?检查 POSIX 线程堆栈上的内存泄漏的最佳方法?
【发布时间】:2011-12-03 05:50:18
【问题描述】:

我使用 Totalview 的 Memoryscape 进行了一些内存泄漏检查,但我“没有”,至少在 HEAP 上没有……但似乎 MemoryScape 之类的工具只检查堆,而不是堆栈泄漏……

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

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

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

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

  • 您推荐使用哪些工具来查找堆栈上的泄漏?我在 Solaris 上使用过“libumem”,但不确定这是否能找到我需要的东西..

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

感谢您的帮助;-)

林顿

【问题讨论】:

  • 除非他的意思是他分配了他用于线程堆栈的空间。
  • 对不起,我猜我的意思是“堆栈内存”......我使用的工具似乎只查看堆内存而不是线程堆栈内存......

标签: c


【解决方案1】:

如果我生成一个 POSIX 线程并且它执行 malloc 等...这些在 堆还是线程堆栈?内存检查(堆)工具 通常也会在线程不释放 malloc 时发现泄漏?

您通过malloc 获得的所有内容,无论您在哪里调用,都来自堆。内存调试器应该能够捕获泄漏。 Valgrind 是一个很好的查找漏洞的工具,它应该可以很好地处理线程。

【讨论】:

    【解决方案2】:

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

    但是如果你有一个可连接的线程,你可能会发生泄漏,但不要在线程句柄上显式调用pthread_join()

    【讨论】:

    • 您好,我在线程句柄上做了一个 pthread_join()...我想我很困惑为什么我的应用程序似乎在泄漏,即使 libumem 和 TotalView 的 MemoryScape 什么也没说...mmmm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多