A imagem a seguir mostra como um espaço de endereço virtual do processo de 32 bits é dividido:
Mas como um espaço de endereço virtual do processo de 64 bits é dividido?
O mapa de memória virtual x86 de 64 bits divide o espaço de endereço em dois: a seção inferior (com o bit superior definido como 0) é o espaço do usuário, a seção superior (com o bit superior definido como 1) é o espaço do kernel. (Observe que x86-64 define endereços "canônico" "metade inferior" e "metade superior", com um número de bits efetivamente limitado a 48 ou 56; consulte a Wikipedia para obter detalhes.)
O mapa completo está documentado em detalhes no kernel ; atualmente 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
__________________|_________|__________________|_________|______________________________
com endereços virtuais de 48 bits. (A variante de 56 bits tem a mesma estrutura, com 64 PB de espaço de endereço utilizável em ambos os lados de um orifício de 16K PB.)
Diferentemente do caso de 32 bits, o mapa de memória “64 bits” é um reflexo direto das restrições de hardware.