Memoria Stack vs. Heap
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 31 de 63.
Cuando su programa en C se ejecuta, utiliza dos regiones de memoria distintas: la pila (stack) y el montículo (heap). Comprender la diferencia entre estas áreas de memoria es crucial para una programación en C eficaz, especialmente cuando se trabaja con punteros y asignación dinámica de memoria.
La pila (stack) se utiliza para la asignación de memoria estática. Aquí es donde se almacenan las variables locales, los parámetros de las funciones y la información de las llamadas a funciones. La pila es gestionada automáticamente por el sistema: cuando declaras una variable local, se asigna memoria en la pila, y cuando la variable sale de su ámbito, esa memoria se libera automáticamente.
void function() {
int x = 10; // Asignado en la pila
char arr[100]; // También asignado en la pila
// La memoria se libera automáticamente cuando la función termina
}El heap se utiliza para la asignación dinámica de memoria. Este es un grupo de memoria más grande que puedes solicitar durante la ejecución del programa.
A diferencia del stack, el heap requiere una gestión manual: debes solicitar memoria explícitamente y liberarla más tarde cuando hayas terminado. Esto te brinda más control, pero también más responsabilidad.
La diferencia clave es la gestión: la memoria de pila (stack) es automática y de tamaño limitado, mientras que la memoria de montón (heap) es manual y mucho más grande. En las próximas lecciones, aprenderás a trabajar con la memoria de montón (heap) utilizando funciones como malloc() y free().
Hoja de referencia
Los programas en C utilizan dos regiones de memoria distintas:
Pila (Stack): Se utiliza para la asignación de memoria estática. Almacena variables locales, parámetros de funciones e información de llamadas a funciones. La memoria se gestiona automáticamente: se asigna cuando se declaran las variables y se libera cuando salen de su ámbito.
void function() {
int x = 10; // Asignado en la pila
char arr[100]; // También asignado en la pila
// La memoria se libera automáticamente cuando termina la función
}Montículo (Heap): Se utiliza para la asignación de memoria dinámica. Es un grupo de memoria más grande que requiere gestión manual: debe solicitar y liberar memoria explícitamente utilizando funciones como malloc() y free().
Diferencia clave: La memoria de la pila es automática y de tamaño limitado, mientras que la memoria del montículo es manual y mucho más grande.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas