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().
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