1. Introducción
• En muchas ocasiones no es posible conocer de antemano la cantidad de variables
necesarias para un programa computacional.
• Existen aplicaciones que requieren de enormes cantidades de arreglos o datos por
momentos breves en el funcionamiento del mismo, por lo que no es viable declarar
de antemano a estas como variables, globales o locales de una función. Lo anterior
implica emplear funciones de ANSI C que permiten reservar memoria de manera
dinámica y ampliarla, reducirla o destruirla en tiempo de ejecución.
• El manejo de memoria dinámica es la base del poder del lenguaje C C++ y le da la
capacidad de crear programas complejos que emplean grandes cantidades de
memoria y los maneja de manera eficiente.
• Todos los programas definen variables que pueden ser definidas como globales y
locales.
MEMORIA DINAMICA
2. • Las variables globales y del programa principal (main) se almacenan en posiciones
fijas de la memoria llamada memoria de datos.
• Las variables locales se almacenan en el segmento de memoria llamada pila y
existen solo cuando se hace una invocación a la función que las declaro. También se
pueden declarar variables estáticas locales que también se almacenan en
segmentos fijos de memoria o en la memoria de datos , sin embargo, también están
disponibles en la función que las declaro.
• Todas estas variables comparten una característica en común, se definen cuando se
compila el programa. Esto significa que el compilador reserva espacio en memoria
para almacenar los valores para estas variables.
• Sin embargo, no todas las veces es posible conocer el numero de variables con el
que va a constar nuestro programa. C C++ ofrece al desarrollador la opción de crear
diferentes tipos de variables de forma dinámica, para crear tales variables se utilizan
funciones como: malloc(), realloc(), calloc(), y free().
MEMORIA DINAMICA
3. • Las regiones de memoria que reservan/liberan estas funciones son almacenadas en el
montículo o heap.
MEMORIA DINAMICA
4. • Por lo regular cuando se diseña un algoritmo, se debe conocer que elementos de
entrada tendrá y cual será la salida, sin embargo, en algunas ocasiones no se sabe de
forma exacta el numero de variables que requerirá nuestro algoritmo.
• Por ejemplo, suponga que se van a registrar el numero de calificaciones de un conjunto
de alumnos, para resolver este problema se podría utilizar una arreglo de calificaciones,
sin embargo, si el numero de alumnos crece, nuestro programa ya no seria valido, puesto
que no existen los recursos necesarios para almacenar todos los datos validos.
Para resolver este problema es necesario recurrir al uso de apuntadores y a la asignación
dinámica de memoria.
ASIGNACION DINAMICA DE MEMORIA
5. ASIGNACION DINAMICA DE MEMORIA
El espacio de memoria asignado a una variable generada de manera
dinámica se crea durante la ejecución del programa (tiempo de ejecución),
al contrario de las variables declaradas en código, que el espacio de
memoria se les asigna en tiempo de compilación.
Una variable que es generada dinámicamente, se construye (por ejemplo
con malloc)y se puede destruir en tiempo de ejecución (uso de free).