Se estamos falando de endereços virtuais, que são os endereços usados pelo código em execução em qualquer sistema operacional moderno .... e programas em execução no "modo longo" ... os endereços são normalmente armazenados em 64 bits (oito bytes ). Mas na especificação arquitetural apenas os 48 bits de baixa ordem são implementados. Os 16 bits restantes (bits 48 a 63) devem ser uma cópia do bit 47, a ordem mais alta dos bits implementados.
Isso resulta em um espaço de endereço que, à primeira vista, é executado de 0x00000000'00000000 até 0xFFFFFFFF'FFFFFFFF. Mas os únicos endereços que podem realmente ser usados são aqueles nos seguintes intervalos:
0x00000000'00000000 through 0x00007FFF'FFFFFFFF
0xFFFF8000'00000000 through 0xFFFFFFFF'FFFFFFFF
Isso resulta em um espaço de endereço teórico de 2 a 64 bytes (16 exbibytes, ou cerca de 18x10 ^ 18). Esses números são, obviamente, os números para processadores de 32 bits, ao quadrado. Mas apenas 256 ^ 48 bytes são realmente implementados, sendo estes últimos divididos em duas metades iguais de 128 TiB cada.
(Modo de usuário no Windows usa o primeiro semestre, que é instanciado novamente para cada processo. O modo de kernel usa o segundo semestre, que é amplamente comum a todos os processos.)
Incidentalmente, na memória não há "células" de 64 ou 32 bits. Existem apenas bytes. x86 / x64 são endereçáveis por byte.
Para o seu exemplo específico, seu ponteiro ocuparia 8 bytes na memória ... a menos que você estivesse executando um programa de 32 bits no modo de compatibilidade, caso em que ocuparia 4 bytes.