【问题标题】:Valgrind possibly lost memoryValgrind 可能失去了记忆
【发布时间】:2018-02-05 08:31:14
【问题描述】:

当使用--leak-check=full 运行 valgrind 时,生成的报告包括有关“可能丢失”的内存的信息。

valgrind 手册中有一些相关信息,以及一些示例报告。

http://valgrind.org/docs/manual/mc-manual.html

LEAK SUMMARY:
   definitely lost: 4 bytes in 1 blocks
   indirectly lost: 0 bytes in 0 blocks
     possibly lost: 0 bytes in 0 blocks
   still reachable: 95 bytes in 6 blocks
                      of which reachable via heuristic:
                        stdstring          : 56 bytes in 2 blocks
                        length64           : 16 bytes in 1 blocks
                        newarray           : 7 bytes in 1 blocks
                        multipleinheritance: 8 bytes in 1 blocks
        suppressed: 0 bytes in 0 blocks

在我自己的系统中,当使用 valgrind 执行我的多线程测试二进制文件时,我得到了大量“可能”丢失的内存。

valgrind 将内存报告为“可能丢失”到底是什么意思?它是丢失了还是不是在这个特定的执行中。在我看来,内存泄漏应该比“可能丢失”更黑白。

【问题讨论】:

  • 我认为您链接的文档解释了什么被认为是“可能丢失”的块以及为什么报告通常不只显示黑白结果。

标签: memory-leaks valgrind


【解决方案1】:

大致的类别是

  • 仍在使用中 = 在退出时有一个指向内存的活动指针
  • 肯定丢失 = 没有指向内存的实时指针
  • 间接丢失 = 有指向内存的指针,但指针本身位于“肯定丢失”的内存中。
  • 可能丢失 = 有一个指针但不是内存的起点。

Valgrind 检测到可能丢失的主要原因是

  1. 一些不小心指向块的垃圾指针。您应该将其视为绝对的损失。
  2. 分配子块或保护带的内存管理器。

因此,作为一项规则,如果您不使用内存管理器,请将您可能的损失视为确定的损失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多