Why is this needed? Is there so many allocs that next_address ends up going through the 32-bit address space? If so, wouldn't we only care about that when VM_MAP_32BIT is specified?

I notice that this code re-uses next_address regardless of flags. I wonder if we should have separate ones for 32bit and non-32bit cases? Or do we always try to alloc under 32-bit?