The original code to keep track of the minimum and maximum indices
of allocated 32-bit primary regions was sketchy at best.
MinRegionIndex & MaxRegionIndex were shared between all size
classes, and could (theoretically) have been updated concurrently. This
didn't materialize anywhere I could see, but still it's not proper.
This changes those min/max indices by making them class specific rather
than global: classes are locked when growing, so there is no
concurrency there. This also allows to simplify some of the 32-bit
release code, that now doesn't have to go through all the regions to
get the proper min/max. Iterate and unmap will no longer have access to
the global min/max, but they aren't used as much so this is fine.
If it's substantially cheaper to walk each class and get the region bounds, can you do the same thing for unmapTestOnly? If it's not a whole bunch cheaper, can you change this to just walk all the regions?