我的应用程序在第一次超时发生时导致内存泄漏10mb。我正在使用linux计时器功能(timer_create等)
对于随后的超时,没有问题。我怀疑linux计时器有些问题
我用valgrind调试它并净化。即便是这些工具也无济于事。在这两个工具中,泄漏的内存显示为少量kb。但是我的应用程序在第一次超时时导致内存泄漏10mb
如果有人提前遇到这个问题,请帮助我。
答案 0 :(得分:2)
要找出代码的哪些位导致泄漏(如果有的话),编译代码以包含调试符号(例如,如果您使用-g
,则包括gcc
标志),然后运行您的计划是通过valgrind。
valgrind --leak-check=full ./your_program
运行将比平时花费更长的时间,但是当你的程序结束时,valgrind的输出应该告诉你你已经泄漏了多少内存以及cuplrits在哪里。
示例输出:
==10934== HEAP SUMMARY:
==10934== in use at exit: 10 bytes in 10 blocks
==10934== total heap usage: 10 allocs, 0 frees, 10 bytes allocated
==10934==
==10934== 10 bytes in 10 blocks are definitely lost in loss record 1 of 1
==10934== at 0x4024F20: malloc (vg_replace_malloc.c:236)
==10934== by 0x8048402: main (a.c:8)
==10934==
==10934== LEAK SUMMARY:
==10934== definitely lost: 10 bytes in 10 blocks
==10934== indirectly lost: 0 bytes in 0 blocks
==10934== possibly lost: 0 bytes in 0 blocks
==10934== still reachable: 0 bytes in 0 blocks
==10934== suppressed: 0 bytes in 0 blocks
由于您已经在使用valgrind,也许您可以尝试使用它附带的Massif工具。它应该能够绘制更准确的内存使用情况(与简单地观看顶部相比)。
查看this tutorial以了解如何使用它。根据程序的运行时和内存使用情况,您可能需要一些其他选项来获得合理的图形。本教程后面几页将介绍一些有用的选项。
祝你好运。