Como o tamanho da palavra é frequentemente igual ao tamanho do ponteiro?

-1

Um ponteiro armazena um endereço de memória, portanto, seu tamanho é o tamanho de um endereço de memória que depende do número de posições de memória. Por outro lado, o tamanho do Word é a maior unidade, que uma instrução pode trabalhar / funciona, assim, o tamanho de um local de memória é irrelevante, como vários podem ser coletados por vez. Então, qual é a relação entre o tamanho da palavra e o tamanho do ponteiro?

    
por radhika 13.01.2017 / 06:07

3 respostas

2

Eles não precisam ser o mesmo, e o número de sistemas de computadores onde eles não são muito mais numerosos do que aqueles em que estão. Ainda assim, existem algumas relações entre o tamanho do ponteiro e o tamanho da palavra.

Os programas fazem muita aritmética de ponteiros. Inscrição de matriz é adição de ponteiro. Os ponteiros são comparados entre si. Se a sua CPU não pode fazer aritmética em algo do tamanho de um ponteiro, seu endereço tem que ser dividido em múltiplas variáveis, o que resulta em um espaço de endereço segmentado ou banido. Estes são complicados para gerenciar e causar proliferação de tipos de ponteiro (ponteiro próximo, ponteiro de longe, ponteiro baseado). Consequentemente, você obtém limitações estranhas adicionais, como listas vinculadas, sendo capazes de armazenar mais itens do que um array pode.

Ainda, microcontroladores com barramentos de dados de 8 bits e espaços de endereços maiores (talvez apenas para código e não para dados) são comuns. Na outra direção, CPUs modernas de uso geral com ponteiros de 32 ou 64 bits têm palavras de dados muito mais amplas do que ponteiros (por exemplo, palavras de dados de 512 bits no subsistema AVX de CPUs x86_64 modernas). Muitos algoritmos livres de bloqueio dependem do acesso atômico a dados com um mínimo de duas vezes o tamanho de um ponteiro.

    
por 13.01.2017 / 08:30
1

TLDR: Coincidência, provavelmente.

Um ponteiro não faz parte da arquitetura do computador em si, é um recurso da linguagem de programação. Por exemplo, a API do Windows define seus próprios tipos de ponteiros e o tamanho deles. Em C no Windows, um ponteiro para um caractere ( char* ) varia entre 32 e 64 bits, dependendo da sua versão. O tamanho de uma palavra pode ter pouco a ver com isso.

Word é uma palavra muito sobrecarregada, ahem, termo. Na arquitetura da CPU, uma palavra pode se referir ao tamanho de uma instrução, ao barramento de dados, ao barramento de memória etc. No Windows API uma palavra é curta não-assinada, ou seja, pelo menos 2 bytes e, portanto, depende de como os curtos são implementados.

Pode haver uma correlação entre palavras do MS e palavras de tamanho de instrução, mas acho que você precisaria de um desenvolvedor do sistema operacional para debater isso, e duvido que isso afete o tamanho dos ponteiros.

    
por 13.01.2017 / 09:14
0

Ao mesmo tempo, os registros do computador e os barramentos internos passaram de 4 bits para 8 bits, depois 16 bits, 32 bits e atualmente 64 bits. O espaço máximo de endereçamento depende do tamanho de um ponteiro (embora algumas CPUs antigas, por exemplo, Z80A, possam paginar memória em blocos do tamanho de um ponteiro).

À medida que os barramentos se tornavam mais largos, também era desejável aumentar a RAM, de modo que o tamanho de um ponteiro também aumentava. Às vezes, o SO não acompanhava o barramento maior, por exemplo, na transição do Windows 7 de 32 bits para 64 bits, no máximo RAM endereçável em primeiro lugar mudou de 4 GB para 8 GB e, finalmente, 192 GB em versões high-end.

Assim, o tamanho dos registradores e do barramento (de um nibble para um byte, depois um Word, depois um DWORD no MS 16-bit OS, usw.) aumentou arbitrariamente, assim como o espaço de endereçamento. Uma explicação mais completa está disponível em @DarkDust.

    
por 13.01.2017 / 06:24