I heard that in the current implementation of Intel processors the upper 16 bits of virtual address are set to zero. Doesn't that mean that the machine can only use up to 2^48 bytes of memory instead of 2^64 bytes? Why have they implemented it this way? Is it because a normal machine doesn't really need 2^64 bytes of memory?
Asked
Active
Viewed 438 times
0
-
Possible duplicate of [Why in 64bit the virtual address are 4 bits short (48bit long) compared with the physical address (52 bit long)?](https://stackoverflow.com/questions/46509152/why-in-64bit-the-virtual-address-are-4-bits-short-48bit-long-compared-with-the) – Peter Cordes Nov 18 '18 at 23:11
-
More virtual address bits would require larger and/or deeper page tables, and more tag bits in caches. x86-64 does check for canonical addresses (correctly sign-extended), which makes future extension easier because there won't be software that breaks if future hardware stops ignoring the high bits. (I think that has happened on other ISAs where high bits could be used for a tagged-pointer or something.) – Peter Cordes Nov 18 '18 at 23:17
-
2The ["32-bit clean"](https://en.wikipedia.org/wiki/Mac_OS_memory_management#32-bit_clean) thing that happened on Mac OS in the late 80s and early 90s was a widespread example of the kind of thing that @PeterCordes mentions where software and the OS itself used the unused high bits of addresses which caused issues when memory expanded to the point where those high bits were useful. – BeeOnRope Nov 18 '18 at 23:43