Thank you (and the others that did so) for the bug report(s).
And thank you for your patience. I’ve been working on this since the start of December 2024, expanding our internal tooling to help us figure out where in the code base these allocations are being made, and which teams need to have a closer look at these allocations to determine whether those are leaked allocations that persist even after their root has been deleted, or never had a root in the first place.
There are quite a lot of these, ranging in size from a few bytes up to several KB and they are spread all over the code base. With the new tooling in place, we’ll distribute investigating and fixing these to the respective teams, as their deep expertise of their area in the code base is needed for this.
As a consequence, we’ve split these bugs into multiple (currently non-public) bug tickets per team with the repro projects from the bug tickets for investigation and validation purposes. We will monitor the amount of Unknown Memory (as of version 1.1.9 of the package we call it Unrooted, as that is more accurate and less likely to get conflated with Untracked) as fixes for these land and potentially open follow up tickets, but for now we’ll be closing the existing bugs.
Since this means voting on the bugs is no longer possible, nor is it possible for all of you to follow along on the status of the fix, we’ll move all of that into this thread. We’ll try our best to keep you updated on the status of this here.
We’re roughly looking at getting the worst of this all resolved for 6.5, leaving it up to the different teams if and if so how far they will backport the changes, as they know best what risk would be involved with that, and if any of this was legitimate leaks that need to get their fixes backported.
Interim Workaround
In the meantime, since 6.3 there is the commandline option -enable-memoryprofiler-callstacks which enables calls-tack reporting for (nearly) all native allocations. Unless you built Unity from source, that will currently not symbolicate the native call-stack part, but crucially, it adds MemLabel information for each allocation. So using the package version 1.1.9 and captures taken from Players/Editors started with that commandline option, the Unrooted amount gets broken down by MemLabel to give you at least a bit more insight into what’s going on there.
.
P.S.: The internal tooling is contingent on the ability to modify Unity’s source code, so while the amount of Unknown memory should continuously drop as fixes land, there is still no good way for you to get more visibility on it .