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.