I'm not claiming next_address is unneeded, I just don't know why it's there. Maybe some other platform needs it? Maybe some code secretly relies on two allocations being near each other? I guess we should check the history and see why it was added in the first place.

Even if Linux always does low memory allocations, it doesn't mean other platforms do. OS X doesn't have MAP_32BIT, which makes me wonder how that's working at all. It looks like Windows uses vm_alloc.cpp too—despite the "Unix" directory—and I have no idea what happens there. Do we even support 64-bit Windows? Well, to the extent that we support anything ;)

Are there any downsides to always forcing low memory allocations? I doubt we'd run out of memory under any reasonable circumstances. Always using MAP_FIXED on BSD would be bad, but hopefully the RLIMIT_DATA trick above works. Otherwise, we could maybe just allocate memory in large chunks, and have vm_acquire() calls just parcel it out.