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

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

Um ponteiro armazena um endereço de memória, portanto seu tamanho é o tamanho de um endereço de memória que depende de nenhum local de memória. Por outro lado, o tamanho do Word é a maior unidade em que uma instrução pode funcionar/funciona. Portanto, o tamanho de um local de memória é irrelevante, pois vários podem ser coletados ao mesmo tempo. Então, qual é a relação entre o tamanho da palavra e o tamanho do ponteiro?

Responder1

Eles não precisam ser iguais, e o número de sistemas de computador onde não estão supera enormemente aqueles onde 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. A subscrição de array é uma adição de ponteiro. Os ponteiros são comparados entre si. Se sua CPU não puder fazer aritmética em algo do tamanho de um ponteiro, seu endereço deverá ser dividido em diversas variáveis, o que resulta em um espaço de endereço segmentado ou armazenado. Eles são complicados de gerenciar e causam a proliferação de tipos semelhantes a ponteiros (ponteiro próximo, ponteiro distante, ponteiro baseado). Como consequência, você obtém limitações estranhas adicionais, como listas vinculadas que podem conter mais itens do que um array.

Ainda assim, microcontroladores com barramentos de dados de 8 bits e espaços de endereço 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 sem bloqueio dependem do acesso atômico a dados que têm no mínimo o dobro do tamanho de um ponteiro.

Responder2

TLDR: Coincidência, provavelmente.

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

Palavraé uma palavra muito sobrecarregada, aham, 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.API do Windowsuma palavra é um short sem sinal, ou sejapelo menos2 bytes e, portanto, depende de como os shorts são implementados.

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

Responder3

Ao mesmo tempo, os registros do computador e os barramentos internos passaram de 4 bits para 8 bits, depois para 16 bits, 32 bits e atualmente para 64 bits. O espaço de endereço máximo depende do tamanho de um ponteiro (embora algumas CPUs antigas, por exemplo, Z80A, possampáginamemória em pedaços 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 do ponteiro também aumentasse. Às vezes, o sistema operacional não acompanhava o barramento maior, por exemplona transição do Windows 7 de 32 bits para 64 bits, a RAM endereçável máxima passou inicialmente de 4 GB para 8 GB e, finalmente, 192 GB nas versões topo de linha.

Portanto, o tamanho dos registros e do barramento (de um nibble para um byte, depois para um Word e depois para um DWORD no sistema operacional MS de 16 bits, etc.) aumentou arbitrariamente, assim como o espaço de endereço.Uma explicação mais completa está disponível em @DarkDust.

informação relacionada