UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

Capítulo 6. Llamadas al sistema para gestión de memoria en C

Cuando se escribe un programa, se asume que las variables se almacenan en memoria y están ahí disponibles para ser utilizadas. En principio, los detalles de cómo se almacenan y organizan los datos en memoria no son visibles a un programador. Sin embargo, como el lenguaje de programación C nos ofrece una gestión de memoria muy cercana a la RAM, para realizar un uso eficiente de la memoria es preciso conocer más de cerca cómo se organiza la memoria de un programa.

6.1. Los tipos de memoria de un programa en C

Un programa en C almacena sus datos en memoria en tres áreas diferentes:

  1. Memoria global. Es el área en la que están almacenadas las variables que se declaran globales o estáticas y las constantes de tipo cadena de caracteres (por ejemplo "Mi string"). Es decir, en esta zona de memoria se almacenan todos aquellos datos que están presentes desde el comienzo del programa hasta que termina.

  2. La pila. Es un área en la que las variables aparecen y desaparecen en un momento puntual de la ejecución de un programa. Se utiliza principalmente para almacenar variables locales a las funciones. Estas variables tienen un ámbito reducido, sólo están disponibles mientras se está ejecutando la función en la que han sido definidas. En la pila se encuentran todas estas variables, y por tanto, en esa zona se está continuamente insertando y borrando variables nuevas.

  3. El heap. Esta zona (traducida en algunos casos como el montón) contiene memoria disponible para que se reserve y libere en cualquier momento durante la ejecución de un programa. No está dedicada a variables locales de las funciones como la pila, sino que es memoria denominada dinámica para estructuras de datos que no se saben si se necesitan, e incluso tampoco se sabe su tamaño hasta que el programa está ejecutando.

Nótese que de estas tres zonas sólo la memoria global tiene un tamaño fijo y que se sabe cuando comienza la ejecución de un programa. Tanto la pila como el heap albergan datos cuyo tamaño no se puede saber hasta que el programa está en ejecución. La siguiente figura muestra estas tres zonas de memoria.

Como las áreas de heap y pila tienen un tamaño variable, el sistema operativo reserva un espacio inicial y las dos zonas crecen y decrecen dentro de ese espacio máximo.

Responde a las siguientes preguntas para ver si has entendido lo que se explica en este documento:

  1. Una variable estática se almacena en

    • Memoria global

    • Memoria de pila

    • El heap

  2. Un parámetro que se pasa a una función se almacena en

    • Memoria global

    • Memoria de pila

    • El heap

  3. Una variable local se almacena en

    • Memoria global

    • Memoria de pila

    • El heap