gpt4 book ai didi

c++ - 内存泄漏检测器工作原理

转载 作者:IT老高 更新时间:2023-10-28 14:00:00 29 4
gpt4 key购买 nike

内存泄漏检测器实际上是如何工作的?一般有哪些基本概念?可以用C++作为语言来解释。

最佳答案

检漏仪有几种不同的工作方式。您可以将 mallocfree 的实现替换为可以在分配期间跟踪更多信息并且不关心性能的实现。这类似于 dmalloc作品。一般来说,任何经过malloc但不是free的地址都会被泄露。

基本的实现其实很简单。您只需维护每个分配及其行号的查找表,并在其被释放时删除该条目。然后当程序完成时,您可以列出所有泄漏的内存。困难的部分是确定应该在何时何地释放分配。当有多个指针指向同一个地址时,这就更难了。

实际上,您可能需要的不仅仅是单行号,而是丢失分配的堆栈跟踪。

另一种方法是valgrind它实现了整个虚拟机以跟踪地址和内存引用以及相关的簿记。 valgrind 方法更昂贵,但也更有效,因为它还可以告诉您其他类型的内存错误,例如越界读取或写入。

Valgrind 本质上是检测底层指令,并且可以跟踪给定内存地址何时不再有引用。它可以通过跟踪地址分配来做到这一点,因此它不仅可以告诉您丢失了一段内存,还可以准确地告诉您丢失的时间何时

C++ 使这两种类型的泄漏检测器都变得更难了,因为它添加了 newdelete 运算符。从技术上讲,new 可以是与 malloc 完全不同的内存来源。然而,在实践中,许多真正的 C++ 实现只是使用 malloc 来实现 new 或者可以选择使用 malloc 而不是替代方法。

此外,像 C++ 这样的高级语言也倾向于使用诸如 std::vectorstd::list 等高级别的方式来分配内存。基本泄漏检测器将分别报告更高级别模式进行的潜在许多分配。这比说整个容器丢失要少得多。

关于c++ - 内存泄漏检测器工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28446850/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com