La siguiente imagen muestra cómo se divide un espacio de direcciones virtuales de proceso de 32 bits:
Pero, ¿cómo se divide un espacio de direcciones virtuales de proceso de 64 bits?
El mapa de memoria virtual x86 de 64 bits divide el espacio de direcciones en dos: la sección inferior (con el bit superior establecido en 0) es el espacio del usuario, la sección superior (con el bit superior establecido en 1) es el espacio del núcleo. (Tenga en cuenta que x86-64 define las direcciones "canónica" de "mitad inferior" y "mitad superior", con una cantidad de bits efectivamente limitada a 48 o 56; consulte Wikipedia para más detalles).
El mapa completo está documentado en detalle en el núcleo ; actualmente parece
========================================================================================
Start addr | Offset | End addr | Size | VM area description
========================================================================================
| | | |
0000000000000000 | 0 | 00007fffffffffff | 128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
| | | |
0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
| | | |
ffff800000000000 | -128 TB | ffffffffffffffff | 128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________
con direcciones virtuales de 48 bits. (La variante de 56 bits tiene la misma estructura, con 64 PB de espacio de direcciones utilizable a cada lado de un agujero de 16K PB).
A diferencia del caso de 32 bits, el mapa de memoria de "64 bits" es un reflejo directo de las restricciones de hardware.