Memoria globalEn ella se almacenan las variables y datos que existen permanentemente durante la ejecución del programa. Las variables que existen durante toda la ejecución del programa son: las variables globales, definidas fuera de cualquier función, y las que tengan el modificador static definidas en cualquier sitio. En esta memoria se ubican también los literales ristra que se almacenan como un vector de caracteres terminado con el carácter '\0'. Al usar en el código un literal ristra se está haciendo referencia a la dirección donde se almacena, o sea, un puntero al primer carácter. La memoria global se caracteriza por tener un tamaño fijo, calculado durante la compilación. Pila de ejecuciónEn ella se almacenan los parámetros de las funciones y las variables no static definidas en ellas. Para cada llamada a una función se toma de la pila una zona para almacenar estas variables. Esta zona es liberada al finalizar la ejecución de la función y puede ser usada para almacenar los datos de la siguiente función llamada. En consecuencia, la pila es una zona de memoria que varía de tamaño durante la ejecución, aunque forma un bloque contiguo. Memoria dinámicaLa memoria dinámica es una zona de memoria donde el programador puede crear y destruir variables según necesite. La forma en que se reserva un bloque de esta memoria para ser usada por un programa en C es mediante la función malloc. Para liberar un bloque previamente reservado con malloc se emplea free. La memoria dinámica, a diferencia de la pila, puede no ocuparse de forma contigua. El tamaño que ocupa esta zona de memoria puede variar durante la ejecución, pero no según las funciones que estén en ejecución, sino dependiendo de los malloc y free que se ejecuten. |
![]() |