Empecé a aprender sobre punteros en C++ y pensé que debería informarme un poco sobre cómo funciona la memoria y cómo se accede a ella. Leí que cuando decimos que un procesador es de 64 bits, tiene un registro de 64 bits y puede acceder a 2^64 ubicaciones de direcciones. También leí que puede obtener 64/8, es decir, 8 bytes de datos a la vez, pero el bus de datos no es lo mismo que el registro, ¿verdad? ¿Tienen que ser del mismo tamaño o suele ser así? ¿Y es el tamaño del registro o el tamaño del bus de datos lo que determina a qué nos referimos, como 32/64 bits? ¿También hay una diferencia entre el tamaño del registro y el tamaño de la dirección?
Cuando se refiere a 64 bits o 32 bits, no es necesario que implique ningún ancho de registro o ancho de bus solo. Puede multiplexar un bus de modo que lea 64 bits en dos lecturas o cuatro lecturas, etc. El diseño de una CPU puede ser tan creativo como el ingeniero detrás de los bloques lógicos. Un buen ejemplo es el 8086 con un espacio de direcciones de 20 bits y un bus de datos de 16 bits. El software que escribe en C++ se envuelve sobre muchas capas de compilación y máquinas de estado de hardware de modo que se abstrae. En el diseño RISC, encontrará que el ancho de los registros y el ancho de la ALU casi siempre tienen el mismo ancho, pero en el diseño CISC, este no es necesariamente el caso.
El ancho del procesador estará definido por el ancho de los registros internos. La ALU podrá tramitar los registros directamente. El ancho del bus de datos y la capacidad de direcciones rara vez definen los bits del procesador.
PD: un compilador de 32 bits y un compilador de 64 bits dan resultados diferentes en una máquina de 64 bits.
Ignacio Vázquez-Abrams
Samuel