¿Cómo es que el tamaño de la palabra suele ser el mismo que el tamaño del puntero?

¿Cómo es que el tamaño de la palabra suele ser el mismo que el tamaño del puntero?

Un puntero almacena una dirección de memoria, por lo que su tamaño es el tamaño de una dirección de memoria que no depende de ninguna ubicación de memoria. Por otro lado, el tamaño de Word es la unidad más grande en la que una instrucción puede funcionar, por lo que el tamaño de una ubicación de memoria es irrelevante, ya que se pueden recopilar varias a la vez. Entonces, ¿cuál es la relación entre el tamaño de la palabra y el tamaño del puntero?

Respuesta1

No tienen por qué ser iguales, y el número de sistemas informáticos en los que no están supera ampliamente a los que sí lo están. Aún así, existen algunas relaciones entre el tamaño del puntero y el tamaño de la "palabra".

Los programas hacen MUCHA aritmética de punteros. El subíndice de matriz es la suma de punteros. Los punteros se comparan entre sí. Si su CPU no puede hacer aritmética en algo del tamaño de un puntero, su dirección debe dividirse en múltiples variables, lo que da como resultado un espacio de direcciones segmentado o agrupado. Estos son complicados de gestionar y provocan la proliferación de tipos similares a punteros (puntero cercano, puntero lejano, puntero basado). Como consecuencia, obtienes limitaciones extrañas adicionales, como que las listas vinculadas pueden contener más elementos que una matriz.

Aun así, son comunes los microcontroladores con buses de datos de 8 bits y espacios de direcciones más grandes (quizás sólo para código y no para datos). En la otra dirección, las CPU modernas de uso general con punteros de 32 o 64 bits tienen palabras de datos mucho más amplias que los punteros (por ejemplo, palabras de datos de 512 bits en el subsistema AVX de las CPU x86_64 modernas). Muchos algoritmos sin bloqueo dependen del acceso atómico a datos que tienen como mínimo el doble del tamaño de un puntero.

Respuesta2

TLDR: Coincidencia, probablemente.

Un puntero no es parte de la arquitectura de la computadora per se, es una característica del lenguaje de programación. Por ejemplo, la API de Windows define sus propios tipos de punteros y su tamaño. En C en Windows, un puntero a un carácter ( char*) varía entre 32 y 64 bits según su versión. El tamaño de una palabra puede tener poco que ver.

PalabraEs una palabra, ejem, término muy sobrecargado. En la arquitectura de CPU una palabra puede referirse al tamaño de una instrucción, el bus de datos, el bus de memoria, etc.API de Windowsuna palabra es un corto sin signo, es deciral menos2 bytes y, por tanto, depende de cómo se implementen los cortos.

Puede haber una correlación entre las palabras de MS y las palabras del tamaño de las instrucciones, pero creo que necesitaría un desarrollador de sistema operativo para debatir eso, y dudo que afecte el tamaño de los punteros.

Respuesta3

Hubo un tiempo en que los registros de computadora y los buses internos pasaron de 4 bits a 8 bits, luego a 16 bits, 32 bits y actualmente a 64 bits. El espacio máximo de direcciones depende del tamaño de un puntero (aunque algunas de las primeras CPU, por ejemplo, Z80A, podríanpáginamemoria en fragmentos del tamaño de un puntero).

A medida que los autobuses se hicieron más anchos, también era deseable aumentar la RAM, por lo que el tamaño del puntero también aumentó. Sin embargo, a veces el sistema operativo no podía seguir el ritmo del bus más grande, p. ej.En la transición de Windows 7 de 32 bits a 64 bits, la RAM máxima direccionable pasó al principio de 4 GB a 8 GB y, finalmente, a 192 GB en las versiones de gama alta.

Entonces, el tamaño de los registros y del bus (de un nibble a un byte, luego un Word, luego un DWORD en el sistema operativo MS de 16 bits, etc.) aumentó arbitrariamente, al igual que el espacio de direcciones.Una explicación más completa está disponible en @DarkDust.

información relacionada