The 2025 Wheel Reinvention Jam just concluded. See the results.

Is the highest memory address (0xffffffffffffffff) reserved by the OS?

I've realized that often in my code (and I've seen it in HmH too) I assume that adding 1 to a valid memory position won't do an overflow.

For example, to iterate over things contained in a memory block, you can do:

int *limit = (int *)(my_memory_block + memory_block_size);
int *it = (int *)my_memory_block;
while(it < limit){
    ...
    it++;
}

But if your allocator had given you a block including the last addressable byte, then this would not work as expected, because 'limit' would overflow into 0. Is this a real concern?


EDIT: I found online that on Windows and Linux the upper and lower addresses are used by the OS so your application won't get that. I guess all other 32-bit or 64-bit platforms will do the same, so I guess it's not really a concern, but if someone knows more about other platforms, that can still help clear things out.


Edited by Opoiregwfetags on

This video might interest you, but it's only about windows: Mysteries of Memory Management Revealed,with Mark Russinovich.

And not all 64-bit addresses are valid on x86 platform. Currently only 48-bit address space is available to use - 128TB for userspace, and 128TB for kernel space. So for your user space pointers upper 17 bits are always zero.

Thanks as always guys. The video linked seems very interesting.