| Versión 3.0 |
| 800x600 mínimo |
|
En esta lección: La memoria de la computadora ----- Otras secciones: Conceptos básicos ----- Programando en C ----- Programando en C++ ----- Programando Windows 9x. ----- Teoría electrónica ----- Circuitos electrónicos ----- Actividades adicionales ----- Hipervínculos ----- Contácteme: Dudas y comentarios ----- |
La memoria de la computadoraEl area completa de la figura 1 representa la memoria de una computadora, incluyendo el area a la derecha que parece una escalera. Todo el código ejecutable y todas las variables de un programa dado se almacenan dentro del area ilustrada en la figura, la pregunta es, ¿Cómo se almacenan los diversos elementos en éste espacio?
Existen tres areas de memoria que tienen facultades especiales asignadas por el compilador y el enlazador, éstas son:
¿Cómo se asigna la memoria global?Tanto el bloque de código main ( ) del programa como las funciones requeridas por el mismo se almacenan el algún lugar de la memoria global. Aunque el sistema asignará los diversos bloques de código en una forma ordenada, asumiremos que no son asignados en un orden particular, de hecho, deberíamos suponer que los bloques son asignados aleatoriamente por toda el area de almacenamiento global y que cualquier función particular no está contigua a otra. Variables globalesDe interés especial son los pequeños bloques de la parte superior de la figura 1 porque representan variables globales las cuales se almacenan en el espacio global, el sistema reserva suficiente memoria para almacenar la variable en cuestión y asigna tal memoria para la variable. La variable global existe durante toda la vida del programa en ejecución. Un puntero globalLa caja etiquetada puntero tiene la habilidad de almacenar punteros de cualquier tipo. Los punteros generalmente son del mismo tamaño para todos los tipos de datos en una determinada combinación de hardware y sistema operativo, por lo que probablemente se les asigne la misma cantidad de bytes. El punto es una convención para representar gráficamente a los punteros, y cuando no incluye una flecha como en la figura, el puntero no ha sido asignado para señalar algo en particular, de hecho puede contener un valor indeterminado aunque por definición, un puntero global es inicializado automáticamente a NULL. Cualquier número de punteros y variables pueden ser almacenados en la memoria global hasta el límite físico de la memoria disponible. ¿Cómo se utiliza el stack?Cuando las variables ó los punteros son requeridos por el sistema, éstos serán asignados secuencialmente al stack empezando por la parte inferior siendo cada elemento sucesivo "apilado" (encimado) en el anterior. Cada caja en el diagrama representa un espacio de almacenamiento para una variable dada de la misma manera que se describió para la memoria global, el sistema se encarga de determinar la cantidad precisa de bytes necesarios para una variable dada, sin embargo, cuando un programa no necesita más la variable almacenada en stack, el espacio ocupado debe ser liberado para permitir que otros programas utilizen el espacio disponible. Piense en el stack como un vaso con agua, conforme vamos requiriendo espacio de stack, vamos llenando el vaso, conforme liberamos espacio del stack, vamos vaciando de agua el vaso. El vaso por supuesto tiene un límite, el stack también. ¿Cómo se utiliza el heap?El heap es un bloque contiguo de memoria que está disponible para utilizarse por cualquier parte del programa siempre que sea necesario. Cuando un programa solicita un bloque de datos, el esquema de asignación dinámica sustrae un bloque del heap y lo asigna al usuario retornando un puntero que señala al principio del bloque. Cuando el sistema termina de utilizar el bloque, lo regresa al heap donde a su vez es colocado en la pila de memoria disponible llamada la lista libre. A esto se le llama desasignación. En éste breve capítulo hemos hecho una exposición general de la memoria de la computadora, existen otros temas relacionados, como la memoria virtual, memoria caché, registros y otros más. Estudiaremos algunos de ellos conforme avancen los temas disponibles en los tutoriales de C, C++ y Windows 9x, particularmente en éste último caso es interesante conocer el manejo de la memoria y la forma de cómo hacer un uso efectivo de la misma. |