Apuntes
Memoria Dinámica

Contenido del apunte (1)
Página 1
Memoria Dinámica
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 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.
• 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 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().
• Las regiones de memoria que reservan/liberan estas
funciones son almacenadas en el montículo o heap.
Asignación dinámica de memoria
• 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.
• 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).
Función malloc()
• malloc() es la forma más habitual de obtener
bloques de memoria dinámica. La función genera o
asigna un bloque de memoria que es el numero de
bytes pasados como argumento.
• malloc() devuelve un apuntador void* al bloque de
memoria asignado, por lo tanto, hay que realizar un
cast al tipo de apuntador requerido, para hacer
buen uso de la memoria o de los datos que se
lleguen a almacenar en dicho bloque de memoria.
Nota: Todas las funciones de asignación dinámica de
memoria se encuentran definidas en la biblioteca
stdlib.h
• El prototipo de la función malloc() sería:
void* = malloc( size_t bytes);
• Donde:
• void*: es el apuntador que almacenará la
referencia o apuntara al bloque de
memoria generado.
• bytes: es el tamaño en bytes del bloque
de memoria que se va a solicitar.
Por ejemplo:

Información
- Descripción
- Carlos Roberto Rocha Zamudio boleta: 2014350645
- Creado por
- carlos zamudio
- Visitas
- 15
- Etiquetas
- Valoración