Normalmente, una memoria está controlada por varias entradas address , así como por una señal de control de lectura / escritura y algunas entradas que controlan cuando se debe realizar la operación de lectura o escritura .
Dadas n entradas de dirección, se pueden distinguir 2 ubicaciones n en la memoria. Estas son las ubicaciones "específicas" a las que la computadora puede acceder. Por lo general, cada ubicación contiene más de un bit. Podría ser un byte (8 bits, o celdas de memoria), o una palabra de varios bytes, que podría tener 16, 32 o 64 bits de ancho .
Si tiene un megabyte de memoria, con acceso de un solo byte, necesitará 20 bits de dirección (señales de entrada individuales) para controlarlo. Para un gigabyte de memoria, necesitarías 30 bits de dirección.
¿Cómo sabría la CPU qué datos extraer y cómo clasificaría los demás datos para obtenerlos?
En general, depende del programador (si se usa lenguaje ensamblador) o del compilador (cuando se usa un lenguaje de nivel superior) para realizar un seguimiento de qué datos se almacenan en qué dirección.
Por ejemplo, si escribe un programa en C con una variable global x
, el compilador decidirá en qué ubicación almacenarlo y se ocupará de generar instrucciones que accedan a esa ubicación cada vez que su programa necesite usar x
.
Si creas una variable local y
dentro de una función, el compilador realmente hará un seguimiento de esa variable en relación con el valor contenido en un registro especial llamado apilar pila (SP). Cada vez que se llama a la función, SP puede tener un valor diferente. Pero y
se creará de nuevo con cada llamada y se almacenará en el mismo desplazamiento desde SP (que el compilador realiza un seguimiento del mismo y generalmente no es visto por el programador).
Una tercera posibilidad es la asignación heap . Lo que significa que el espacio de almacenamiento se asigna desde un "montón" de memoria disponible. En algunos idiomas (Java, por ejemplo), el compilador puede realizar la mayor parte del trabajo de seguimiento de la memoria del montón. En C, el programador es responsable de mantener un registro de la memoria del montón. Esto se hace con las variables puntero , que básicamente codifican la dirección a la que debería acceder el programa para obtener esos datos en particular.