Em um laptop com 4 GB de RAM, pensei que os endereços de memória deveriam começar em byte 0
e terminar antes 0x1_0000_0000
(_ é um separador adicionado para maior clareza), mas MemTest86 diz que termina em 0x1_6060_0000
, mas não são 1542 MB a mais?
Da mesma forma, em um computador desktop com 16 GB de RAM, acho que deveria terminar em 0x4_0000_0000
, mas o MemTest86 diz 0x4_2F60_0000
, que é 758 MB maior.
Por que o MemTest86 mostra espaços de endereço maiores que a quantidade real de memória física?
Responder1
Esta é uma situação muito comum em sistemas modernos. E por um bom motivo.
Há décadas, os computadores têm dispositivos de hardware mapeados na memória. Este é um hardware especial que pode ser acessado pela CPU como se fosse uma memória. Isto é usado para comunicação rápida com dispositivos de hardware, como o sistema de vídeo. Sem isso, os computadores sofreriam uma grave penalidade de desempenho.
Para compatibilidade com sistemas operacionais de 32 bits, esse hardware mapeado na memória deve aparecer no intervalo de endereços inferior de 4 GB. Em sistemas modernos, isso significa pelo menos várias centenas de MB, o que é bastante significativo. Como o hardware mapeado na memória e a RAM não podem existir nos mesmos endereços, uma parte considerável da RAM ficaria inacessível. É por isso que as versões de 32 bits do Windows não conseguem ver todos os 4 GB de RAM.
Esta não é uma boa situação. Mas existe uma solução, pelo menos para os sistemas operacionais que conseguem lidar com isso. A solução é remapear as partes da RAM que de outra forma seriam inacessíveis para endereços acima de 4 GB. Isto é o que você está vendo. Para o benefício dos sistemas operacionais de 32 bits, o máximo de RAM possível será deixado em endereços abaixo de 4 GB.
Esse remapeamento de memória é feito pelo hardware do computador e pelo BIOS, portanto estará disponível para qualquer sistema operacional. Sistemas operacionais modernos de 64 bits e programas de teste de memória são projetados para isso. Por motivos técnicos, as versões cliente de 32 bits do Windows ignorarão toda a memória acima de 4 GB. Com os sistemas operacionais modernos, os aplicativos nunca veem endereços físicos de RAM, portanto o mapeamento de memória não é motivo de preocupação para eles.