Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

The address space of AMD64 was designed so that both the upper and lower spaces of the address are used when using less than 64 bus lines specifically to address this problem.


That only ensures the programmer fixes the pointer before dereference.

Tagged pointers that don’t make it to the bus are still a compatibility problem. It means malloc() can’t return an address overlapping the tagged bits.


malloc usually gets more aligned with time, not less. The tagging we're talking about goes in the high bits of a pointer.


Yes and as memory increases more of the high bits are used as actual address bits. X64 started with 40 physical bits. We’re now at 48.


Right, but a lot of high-performance code will tag the high bits of pointers anyways and apply a mask before using it for memory accesses.


> and apply a mask before using it for memory accesses

So it never goes onto the address bus. So it never causes an addressing issue.

The 24-bit issue of the 68000 is fundamentally different. Those tagged 32-bit pointers were used directly, but truncated by the width of the actual physical interface so they never touched the outside world.

...until Motorola released CPUs with full 32-bit address pins on the package. Oops.


It's still going to break software, though. But if you're looking for a platform that lets you do this, look no further than ARMv8's TBI.




Consider applying for YC's Winter 2027 batch! Applications are open till November 2.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: