哪里是分配,什么是负分配

umdh: where are the deallocations, and what is a negative allocation?

本文关键字:分配 什么      更新时间:2023-10-16

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

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

  2. diff报告按分配大小递减排序。在报告的底部有一些分配是负数,分配的数量为0。这是什么意思?

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

    因此,剩余的项(您看到的所有内容)都是(潜在地)导致泄漏的分配。对于所有这些分配,你知道对象是在哪里创建的(从调用堆栈),你的任务是找出应该在哪里释放它(例如通过代码审查)。

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

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