gpt4 book ai didi

c++ - umdh:解除分配在哪里,什么是负分配?

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:45 27 4
gpt4 key购买 nike

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

  1. 如果它所做的只是报告分配,而不是解除分配,它如何帮助我发现泄漏?在 diff 结果中,我得到了很多新的分配,但没有关于哪些已解除分配哪些未解除分配(因此导致泄漏)的报告。

  2. 差异报告按分配大小递减排序。报表底部有几个allocation,是负数,allocations个数为0,什么意思?

最佳答案

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

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

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

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

关于c++ - umdh:解除分配在哪里,什么是负分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24627790/

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