domingo, 9 de diciembre de 2007

4.3.4 Almacenamiento Direccionamiento y Representacion en Memoria

Supongamos que la memoria utilizada tiene un tamaño de 4 Gigabytes y por tanto sus direcciones se representan con 32 bits. Las direcciones de memoria son números naturales en el rango [0, 232 - 1]. Pero este número natural es susceptible de ser almacenado él mismo en memoria. Es decir, se puede almacenar la representación binaria de una dirección de memoria en la propia memoria. Al tener un tamaño de 32 bits o 4 bytes, se utilizan para ello cuatro posiciones de memoria consecutivas.

Una dirección de memoria, por tanto, se puede considerar de dos formas posibles: o como una dirección de una celda de memoria, o como un número natural susceptible de ser manipulado como tal. Supóngase que en la posición de memoria 0×00000100 se encuentra almacenado el número entero de 32 bits 0×0153F2AB y que en la posición 0×00000200 se debe almacenar la dirección de dicho número. Para ello se almacena, a partir de la posición 0×00000200 el número 0×00000100 utilizando los cuatro bytes a partir de esa posición y se hace en orden creciente de significación al utilizar el esquema little endian.

Tras almacenar la dirección de memoria de un dato en la posición 0×00000200, ¿es posible obtener de nuevo el número 0×0153F2AB? La respuesta es afirmativa, pero no de forma inmediata, se debe obtener de memoria primero los cuatro bytes almacenados en la posición 0×00000200 y utilizarlos como una dirección de memoria de donde obtener los cuatro bytes contenidos en la posición 0×00000100. El acceso a este último dato se ha realizado de forma indirecta, es decir, mediante un acceso previo a memoria para obtener la dirección del dato final. Utilizando la notación funcional de operaciones sobre memoria, el acceso al dato se logra ejecutando Lectura(Lectura(0×00000200)).



No hay comentarios: