Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 需要有关内存泄漏的帮助_Linux - Fatal编程技术网

Linux 需要有关内存泄漏的帮助

Linux 需要有关内存泄漏的帮助,linux,Linux,当第一次超时时,我的应用程序导致10mb内存泄漏。听说我正在使用linux定时器功能(定时器创建等)。 对于随后的超时,不存在任何问题。我怀疑linux定时器有问题。 我用valgrind和purify调试了它。即使这些工具对我也没有帮助。在这两种工具中,泄漏的内存都显示为几kb。但是我的应用程序在第一次超时时导致了10mb的内存泄漏。 如果有人之前遇到过这个问题,请帮助我。要找出导致泄漏的代码位(如果有),请编译代码以包含调试符号(即,如果使用的是gcc,则包含-g标志),然后通过运行程序 运


当第一次超时时,我的应用程序导致10mb内存泄漏。听说我正在使用linux定时器功能(定时器创建等)。
对于随后的超时,不存在任何问题。我怀疑linux定时器有问题。
我用valgrind和purify调试了它。即使这些工具对我也没有帮助。在这两种工具中,泄漏的内存都显示为几kb。但是我的应用程序在第一次超时时导致了10mb的内存泄漏。

如果有人之前遇到过这个问题,请帮助我。

要找出导致泄漏的代码位(如果有),请编译代码以包含调试符号(即,如果使用的是
gcc
,则包含
-g
标志),然后通过运行程序

运行时间会比平时稍长一些,但当程序结束时,valgrind的输出应该会告诉您泄漏了多少内存以及内存杯在哪里

样本输出:

==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工具。它应该能够更准确地描述内存使用情况(与简单地观察顶部相比)

看看如何使用它。根据程序的运行时和mem使用情况,您可能需要一些额外的选项来获得合理的图形。本教程后面几页将介绍一些有用的选项


祝你好运。

展示一些代码,解释更多细节,告诉我们你用哪种语言写的怎么样?你在应用程序上使用过valgrind吗?你可能会发现它的输出很有用。以及为什么你认为它是内存泄漏。首先,告诉我们你是如何得出10MB的数字的。然后,提供一个简单的例子来说明这个问题。@Simone,为什么我认为它是内存泄漏,运行时增加的内存并没有减少。@Isc,我已经做了以下泄漏摘要。812==18074==泄漏摘要:813==18074==绝对丢失:0个块中有0个字节。814==18074==可能丢失:20个块中有3424个字节。815==18074==仍然可访问:47个块中的10422字节。816==18074==抑制:0个块中有0个字节。它是五个kb的。我不明白10mb是如何变大的leaked@Isc,您的示例中肯定丢失了10个字节的原因是什么?在示例代码中,我故意分配内存,但没有释放内存。valgrind的输出中显示的行号将与分配内存的行号相对应。@Isc但在我的应用程序中没有明确丢失的内存。加上可能已丢失且仍然可以访问,它的大小大约为15KB。但我不明白top command中的vrt是如何被10mb激活的。那就不是内存泄漏了。您声称泄漏的恶意10MB可能是已加载库使用的内存。见Q中的评论。
==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