It used to subtract the number of bytes during deallocation, but
that required knowing the size of an object at free time. That
isn't always available. The old code could read a freed object
while doing this. Bad!
Instead, this tracks how much memory is still being used by
marked objects. It's correct, and is also a bit less code and
faster.