L'image suivante montre comment un espace d'adressage virtuel de processus 32 bits est divisé:
Mais comment un espace d'adressage virtuel de processus 64 bits est-il divisé?
La carte de mémoire virtuelle x86 64 bits divise l'espace d'adressage en deux: la section inférieure (avec le bit supérieur défini sur 0) est l'espace utilisateur, la section supérieure (avec le bit supérieur défini sur 1) est l'espace noyau. (Notez que x86-64 définit les adresses «canoniques» «moitié inférieure» et «moitié supérieure», avec un nombre de bits effectivement limité à 48 ou 56; voir Wikipedia pour plus de détails.)
La carte complète est documentée en détail dans le noyau ; actuellement il ressemble
========================================================================================
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
__________________|_________|__________________|_________|______________________________
avec des adresses virtuelles 48 bits. (La variante 56 bits a la même structure, avec 64 PB d'espace d'adressage utilisable de chaque côté d'un trou PB de 16 Ko.)
Contrairement au cas 32 bits, la carte mémoire «64 bits» est un reflet direct des contraintes matérielles.