64-bit Pointer Limitations

Discussions focus on how 64-bit architectures like x86_64 and ARM64 use only 48 bits for addressing instead of full 64, enabling pointer tagging, compression, and optimizations for cache efficiency and memory savings.

📉 Falling 0.5x Hardware
2,680
Comments
19
Years Active
5
Top Authors
#6340
Topic ID

Activity Over Time

2008
10
2009
49
2010
43
2011
49
2012
132
2013
139
2014
123
2015
118
2016
149
2017
137
2018
180
2019
152
2020
185
2021
179
2022
319
2023
234
2024
226
2025
237
2026
19

Keywords

RAM e.g SPARC CPU LA57 IMHO SpiderMonkey JS ARM AIX 64 64 bit bits address space address bit pointers pointer 32 32 bit

Sample Comments

hedora May 21, 2021 View on HN

Current intel 64 bit machines only have 57 bits of address space. The top bits of the pointers are wasted.

sidewndr46 Jul 28, 2025 View on HN

Doesn't the opposite happen with 64 bit pointers on x86_64? the lower bits have no use so they get used for tracking if a memory segment is in use or other stuff

Gibbon1 Feb 5, 2025 View on HN

With a 64 bit pointer you could make it bit addressable.

cm2187 Jun 6, 2017 View on HN

What would a 64bit address space solve that a 128bit would break?

db48x Feb 12, 2021 View on HN

Your CPU can handle 39-bit physical memory addresses (up to 512 GB of physical memory), and 48-bit virtual addresses (256 TB). Your operating system maintains a mapping from virtual to physical addresses, usually arranging the map so that every process has a separate memory space. Pointers are all still 64 bits long though.

CJefferson Sep 21, 2019 View on HN

Nothing on x86_64 is returning "full 64 bit pointers", unless they are also playing games, as CPUs only support 48 bits of address space.Also, your suggestions are a bit strict, in my opinion. Every VM or interpreter I know about uses this kind of trick, usually to squish things like integers. Not doing this requires adding an extra allocation for every integer.

jmalicki Dec 12, 2018 View on HN

The value in the pointer is an index into an array of 64bit ints rather than bytes. This lets you address 32GB with a 32bit pointer rather than 4GB.

sethg Nov 24, 2008 View on HN

If everything you point to is aligned on an eight-byte boundary, and if you don't use type tags, then a 32-bit pointer can point to anything in a 35-bit address space. So you can get up to 32 GB.

yoklov Dec 27, 2016 View on HN

Both are bigger than the x64 address space...

jburgess777 Sep 7, 2016 View on HN

Last time I looked, the current 64bit Intel CPUs only used the lower 48 bits for userspace virtual addresses. This leaves 16 bits available if you want to tag your pointers with some additional information. This can be useful for saving space or using them with an 8 byte cmpxchg.This kind of trick is easier to get away with if you know exactly which CPUs your software is going to run on. Otherwise your software could break horribly when a new generation of CPU comes around.