【问题标题】:umdh: where are the deallocations, and what is a negative allocation?umdh:释放在哪里,什么是负分配?
【发布时间】:2014-08-28 22:48:57
【问题描述】:

我有两个关于 umdh 的基本问题:

  1. 如果它所做的只是报告 allocations,而不是 deallocations,它如何帮助我找到泄漏?在差异结果中,我得到了很多新的分配,但是没有报告哪些被释放,哪些没有被释放(从而导致泄漏)。

  2. 差异报告按分配大小递减排序。在报告的底部有几个分配是负数,分配的数量是0。这是什么意思?

【问题讨论】:

    标签: c++ memory-leaks umdh


    【解决方案1】:
    1. UMDH(或实际上:由于 GFlag 设置而导致的 Windows)将在为对象分配内存时存储调用堆栈。如果该内存被释放,调用堆栈也会丢失。但这没关系,因为它已被释放并且在这种情况下您没有泄漏。

      所以剩下的项目(你看到的所有东西)都是(可能)导致泄漏的分配。对于所有这些分配,您知道对象是在哪里创建的(从调用堆栈中),并且您的任务是找出应该在哪里释放它(例如通过代码审查)。

    2. 我不太确定这一点,但请考虑在您拍摄第一个 UMDH 快照之前存在的长寿对象。如果稍后释放它,它将显示为负内存。在这种情况下,您可能也没有调用堆栈(如 1. 中所述),它只是一个信息。

      这可能表明您应该更早开始制作 UMDH 快照,但如果大小与您要查找的对象不匹配,通常也可以忽略这些快照。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多