Con frecuencia se supone que la memoria contiene ocho bits por dirección (donde la dirección tiene una longitud arbitraria), pero eso es solo una convención basada en familias de CPU populares de los últimos 30 años más o menos. El hardware de memoria puede construirse para contener cualquier número de bits por dirección, desde 1 hasta el máximo que desee, y de hecho existen tales dispositivos, y en un FPGA generalmente puede definir que la memoria de bloque sea de cualquier ancho de datos dado y la longitud de la dirección que desee.
Con eso fuera del camino, ¿qué se guarda en la memoria? De nuevo, eso es un artefacto de una arquitectura de CPU dada:
En una CPU llamada Harvard Architecture, hay dos conjuntos de memoria completamente independientes, uno que contiene solo instrucciones y otro para datos que pueden ser manipulados por el programa y la CPU impone una separación estricta de los dos. En una arquitectura “Princeton” (p. Ej., CPU típicas de Intel), hay un único espacio de direcciones y el contenido puede ser cualquiera.
- ¿Por qué una trampa interrumpe tanto el borde como el nivel activado?
- ¿Cuáles son algunas paradojas interesantes en informática?
- Informática: ¿Cuáles son las ventajas y desventajas de la arquitectura von Neumann frente a la arquitectura de Harvard?
- ¿Cuál es la explicación intuitiva de Learning to Rank y algoritmos como RankNet, LambdaRank y LambdaMART? ¿En qué tipos de datos / variables se pueden usar estas técnicas? ¿Cuáles son sus puntos fuertes y limitaciones?
- ¿La capacitación para la detección de spam es universal en todos los usuarios para los principales clientes de correo electrónico?
En ambos tipos, las instrucciones particulares pueden incorporar datos directamente dentro del flujo de instrucciones, como cargar un registro con un valor constante. Se decide que una instrucción diferente significa usar el valor constante como una dirección de memoria para ir a leer / escribir los datos desde (o hacia). Otro más dirá que use el valor en un registro particular como la dirección en lugar de una dirección constante incrustada en la instrucción misma. Y así sucesivamente, la indexación es el siguiente tipo de acceso a memoria popular. (Valor de registro + otro valor de la memoria o un registro = dirección final que se utilizará). En la versión de Harvard, la memoria de datos simplemente se supone en todos estos casos, y la dirección utilizada al acceder a la memoria de instrucciones solo puede verse afectada por el flujo secuencial normal del contador del programa y las instrucciones de salto que lo cambian.
Por último, a su pregunta sobre el tamaño de los datos, una vez más, el conjunto de instrucciones de la CPU dicta lo que puede hacer. Intel x86 le permite acceder a bytes individuales, palabras y palabras Dwords de 16 o 32 bits, o palabras Q de 64 bits. Al acceder a los tipos más pequeños, se usa un nombre de registro diferente que implica que solo se necesita una parte del registro completo para que coincida con la longitud de los datos. Por ejemplo, EAX de 32 bits también tiene un nombre AX de 16 bits para la mitad inferior, que a su vez tiene AH y AL de 8 bits para las dos mitades de AX. El hardware se encarga de acceder solo a los bytes individuales necesarios en la memoria. En aras de la eficiencia, en los procesadores modernos, todos los 64 bits (4 direcciones adyacentes de 8 bits) de una determinada QWord alineada se leerán simultáneamente desde la memoria principal, incluso si la instrucción solo está interesada en algún subconjunto de los bits, ya que hay un probabilidad de que las instrucciones posteriores usen otras partes, que luego pueden recuperarse más rápidamente de la memoria caché.