valgrind 和系统之间的区别(“泄漏 a.out”)

问题描述 投票:0回答:1

在C语言中,内存管理和内存泄漏是我认为最容易混淆的话题。最常用的控制方法是 valgrind。然而,在我的课程中使用的是 Mac 计算机,并且在这些计算机上使用函数 system("leaks a.out") 而不是 valgrind。我在家里有 Windows 和 Ubuntu 操作系统的电脑上尝试了这两种方法,并比较了结果。我得到了不同的结果,因为 valgrind 甚至显示了最小的泄漏,而使用 system("leaks a.out") 函数,我只获得了特定代码中的泄漏。

我还搜索了许多资源,但找不到有关如何使用 system("leaks a.out") 函数的任何资源。熟悉此功能使用的人可以解释为什么我得到不同的结果吗?我以为我知道内存泄漏,但在发现 system("leaks a.out") 函数后,我所知道的一切都搞混了。

结果,这是总结:我尝试了这个函数(系统(“泄漏a.out”))和程序(valgrind)。我期待相同的结果,但得到了不同的结果。因为漏就是漏,总不能改了吧?

c memory-leaks malloc system valgrind
1个回答
0
投票

不都一样吗?有点。

如果该工具可以看到所有对分配和释放的调用,那么泄漏检测就相当简单了。

在某些情况下,工具无法获得所需的所有信息。

  1. 如果工具没有从头开始录制。例如
    leaks
    可以附加到 PID。在附加之前分配的内存将不会被跟踪。
  2. 用户自定义分配函数。通常这些需要注释才能被工具识别,否则不会检测到泄漏。

当然,工具也总是有bug的可能。

大多数工具也有某种抑制机制(有一组默认抑制)。这可能会导致您所看到的有所不同。

使用 -s 运行 Valgrind 以查看它使用了哪些抑制。

© www.soinside.com 2019 - 2024. All rights reserved.