Nope, we're not wrapping the address space. Rather, as noted below, Linux obeys the mmap() hint, so it's unlikely to ever allocate anything about 32-bits. But on FreeBSD, the first time there's a non-VM_MAP_32BIT allocation, it will be above 32-bits and next_address will be updated to point to the following address. The next VM_MAP_32BIT allocation would have a counterproductive hint!

I think you're probably right that we should split next_address, but it's hard to be sure, since to be honest I'm not sure what it's for in the first place. It doesn't seem like Linux needs it to keep allocations within 32-bits, since it has MAP_32BIT. Does it have some other purpose? Maybe for OS X? For better locality of allocations?