A largura de bit do barramento de endereço físico pode ser menor ou menor que a largura de bit em um determinado endereço de memória, pois há todos os tipos de hacks de hardware que você pode projetar em um sistema para permitir endereçamento estranho modos. Por exemplo, em alguns sistemas de 32 bits, o barramento de endereços tem 52 bits de largura. Como outro exemplo, algumas instruções da CPU podem decodificar um endereço mais longo usando uma combinação de um endereço base e uma tabela de pesquisa.
No final do dia, é tarefa do hardware interpretar um endereço de memória de uma CPU. A CPU apenas calcula o endereço de memória que precisa e a envia para o controlador de memória da placa-mãe (lembre-se, estamos falando de hardware, não de software aqui, veja minha nota final na parte inferior). O trabalho do controlador de memória é interpretar esse endereço e colocar os dados apropriados no barramento de memória.
Como tudo isso é tratado em um nível de hardware, é possível aumentar o espaço de endereço físico de alguns sistemas de memória de bit inferior usando extensão de endereço físico . Novamente, como esses endereços estendidos são manipulados é parte de como o sistema / hardware foi implementado.
Por fim, para dar mais mérito aos hacks de hardware que mencionei acima, um bom exemplo é a entrada mapeada na memória / output (MMIO para breve). Isso permite que uma CPU acesse os periféricos e RAM através do próprio barramento de endereços. Geralmente isso é feito através dos endereços de memória de ordem mais alta para evitar conflitos de endereço de ordem inferior. No entanto, isso deu origem à barreira de memória de 3 GB comumente conhecida em todas as variantes de consumidor dos sistemas operacionais Windows de 32 bits. Novamente, isso é apenas para mostrar o que é possível em um nível de hardware.
Da perspectiva de um programador de alto nível, isso não tem nada a ver com variáveis de ponteiro. Eles sempre têm o mesmo tamanho de dados, já que essas extensões de endereço são manipuladas para você pelo sistema operacional e / ou pelo próprio hardware. Tamanhos de ponteiro, endereços e deslocamentos são definidos / calculados pelo compilador.