Qual é o tamanho de um endereço de uma variável na memória em um processador de 64 bits (Intel i3 / i5 / i7)?

0

Seria endereço de 64 bits ou ainda são 32 bits ou como eu posso ter lido erroneamente os endereços são de 48 bits? Ou a Intel usa um endereço de 32 bits de uma célula e metade de outra de 32 bits produzindo 48 bits? Então, usando um ponteiro de caractere único para uma variável, qual seria o tamanho do próprio endereço (0xFFEDEDAC) 4 bytes?

    
por Vikki 13.03.2017 / 22:28

1 resposta

1

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.

    
por 13.03.2017 / 22:43