Linux上的多线程C应用程序中的内存泄漏

Linux上的多线程C应用程序中的内存泄漏,第1张

概述我们有一个在 Linux上运行的大型多线程C应用程序.我们看到应用程序内存占用的速度越来越快,并且相信存在一些泄漏.我们已经尝试了我们拥有的每一种工具(valgrind,DynLeak,Purify),但没有找到任何东西.由于此应用程序可以在Windows上运行,我们还尝试了Bounds Checker.也没有帮助. 我们需要一种可以提供帮助的新工具.我查看了Google Perfomrance 我们有一个在 Linux上运行的大型多线程C应用程序.我们看到应用程序内存占用的速度越来越快,并且相信存在一些泄漏.我们已经尝试了我们拥有的每一种工具(valgrind,DynLeak,Purify),但没有找到任何东西.由于此应用程序可以在windows上运行,我们还尝试了Bounds Checker.也没有帮助.

我们需要一种可以提供帮助的新工具.我查看了Google Perfomrance Tools,MMGR by Paul Nettle,MemCheck Deluxe.他们都没有给我留下深刻印象.

这个任务有什么好的工具吗?

解决方法 C/C++中内存泄漏的定义非常具体:它是已分配的内存,然后指针被覆盖或以其他方式丢失. Valgrind通常会开箱即用,但事情并非总是如此简单.

>您的应用程序很可能仍在使用该内存.在这种情况下,您可能拥有Java程序员认为泄漏的内容,例如在结构中输入数据,很少(或从不)删除条目.
>您可能错误地测量了内存的内存使用情况.在linux上,内存使用量测量并不像它们看起来那么简单.你是如何衡量你的内存使用量的?
>您应该考虑使用您正在使用的任何内存分析工具的应用程序挂钩(Valgrind称之为client requests),以避免报告仅在程序终止时发出的问题.使用这些钩子可能会帮助您精确定位泄漏的位置.
>您应该尝试使用堆分析器(例如Valgrind的massif)来查找具有过多分配内存量的内存分配位置.
>确保您的应用程序中没有使用自定义分配器或垃圾收集器.据我所知,没有user interference,没有内存分析工具可以使用自定义分配器.
>如果您的内存泄漏量足以在可接受的应用程序运行时间内检测到,您可以尝试通过版本控制系统对旧版本进行二进制搜索,以识别引入问题的提交.至少Mercurial
和Git为此任务提供内置支持.

总结

以上是内存溢出为你收集整理的Linux上的多线程C应用程序中的内存泄漏全部内容,希望文章能够帮你解决Linux上的多线程C应用程序中的内存泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1027155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存