SlideShare una empresa de Scribd logo
1 de 14
Es memoria que se reserva en tiempo de ejecución. Su principal
ventaja frente a la estática, es que su tamaño puede variar
durante la ejecución del programa.(En C, el programador es
encargado de liberar esta memoria cuando no la utilice más). El
uso de memoria dinámica es necesario cuando no conocemos el
número de datos/elementos a tratar; sin embargo es algo más
lento, ya que el tiempo ejecución depende del espacio que se va
ha usar Hay que mencionar que la memoria estática es mas
rápida ya que esta disponible desde que se inicio el programa.
Su tamaño y forma es variable (o puede serlo) a lo largo
de un programa, por lo que se crean y destruyen en
tiempo de ejecución. Esto permite dimensionar la
estructura de datos de una forma precisa: se va
asignando memoria en tiempo de ejecución según se va
necesitando.
►   Los punteros proporcionan el soporte necesario para el potente
    sistema de asignación dinámica de memoria de C.
►   La asignación dinámica es la forma en la que un programa
    puede obtener memoria mientras se está ejecutando.
►   A las variables globales por ejemplo, se les asigna memoria en
    tiempo de compilación.
►   Durante la ejecución no se pueden añadir variables globales o
    locales, pero existen ocasiones en las que un programa necesita
    usar cantidades de memoria variables.
   New devuelve una referencia a una posición en memoria
    que a guardar el tipo indicado en la sentencia new.
   Tras una llamada fructífera, new devuelve un puntero. Si no
    hay suficiente memoria libre para satisfacer la petición, se
    da un fallo de asignación y devuelve un NULL.

   El siguiente código asigna memoria para guardar datos de
    una estructura persona:
         persona *p;
         p = new persona;
  La instrucción delete es la opuesta a new porque devuelve al
   sistema la memoria previamente asignada.
 Una vez que la memoria ha sido liberada, puede ser reutilizada
   en una posterior llamada a new.
Ejemplo:
        persona *p;
        p = new persona;
        ……..
        delete p;
La biblioteca estándar de C proporciona las funciones malloc,
 calloc, realloc y free para el manejo de memoria
 dinámica. Estas funciones están definidas en el archivo de
 cabecera stdlib.h.        MALLOC
Reserva un bloque de memoria y devuelve un puntero void al inicio
de la misma. Tiene la siguiente definición:
void *malloc(size_t size);
donde el parámetro size especifica el número de bytes a reservar.
En caso de que no se pueda realizar la asignación, devuelve el valor
nulo (definido en la macro NULL), lo que permite saber si hubo
errores en la asignación de memoria.
CALLOC
Funciona de modo similar a malloc, pero además de reservar
memoria, inicializa a 0 la memoria reservada. Se usa comúnmente
para arreglos y matrices. Está definida de esta forma:
void *calloc(size_t nmemb, size_t size);
El parámetro nmemb indica el número de elementos a reservar,
y size el tamaño de cada elemento. El ejemplo anterior se podría
reescribir con calloc de esta forma:
REALLOC
La función realloc redimensiona el espacio asignado de forma
dinámica anteriormente a un puntero. Tiene la siguiente
definición:
void *realloc(void *ptr, size_t size);
Donde ptr es el puntero a redimensionar, y size el nuevo
tamaño, en bytes, que tendrá. Si el puntero que se le pasa tiene
el valor nulo, esta función actúa como malloc. Si la reasignación
no se pudo hacer con éxito, devuelve un puntero nulo, dejando
intacto el puntero que se pasa por parámetro. Al usar realloc, se
debería usar un puntero temporal. De lo contrario, podríamos
tener una fuga de memoria, si es que ocurriera un error
en realloc.
Cuando se redimension la memoria con realloc, si el nuevo
tamaño (parámetro size) es mayor que el anterior, se
conservan todos los valores originales, quedando los bytes
restantes sin inicializar. Si el nuevo tamaño es menor, se
conservan los valores de los primeros size bytes. Los restantes
también se dejan intactos, pero no son parte del bloque
regresado por la función.
FREE
La función free sirve para liberar memoria que se asignó
dinámicamente. Si el puntero es nulo, free no hace nada. Tiene la
siguiente definición:
void free(void *ptr);
El parámetro ptr es el puntero a la memoria que se desea liberar:
Una vez liberada la memoria, si se quiere volver a utilizar el
puntero, primero se debe reservar nueva memoria
con malloc o calloc:
Memoria dinamica
Memoria dinamica

Más contenido relacionado

La actualidad más candente

Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datosEstructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datosJosé Antonio Sandoval Acosta
 
Unidad 3 estructura lineales
Unidad 3 estructura linealesUnidad 3 estructura lineales
Unidad 3 estructura linealesEnrique2194
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosJosé Antonio Sandoval Acosta
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..NANO-06
 
Funciones de administracion de memoria
Funciones de administracion de memoriaFunciones de administracion de memoria
Funciones de administracion de memoriaMiguel Magaña
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesIsrael Castillo Cruz
 
Estructura básica de un programa en C++
Estructura básica de un programa en C++Estructura básica de un programa en C++
Estructura básica de un programa en C++Rosbelia Balza
 

La actualidad más candente (20)

Administración de memoria
Administración de memoriaAdministración de memoria
Administración de memoria
 
Recursividad
RecursividadRecursividad
Recursividad
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datosEstructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
 
Unidad 3 estructura lineales
Unidad 3 estructura linealesUnidad 3 estructura lineales
Unidad 3 estructura lineales
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivos
 
Listas doblemente enlazadas
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadas
 
Tecnicas de Administracion de Memoria
Tecnicas de Administracion de MemoriaTecnicas de Administracion de Memoria
Tecnicas de Administracion de Memoria
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Metodo de busqueda
Metodo de busquedaMetodo de busqueda
Metodo de busqueda
 
Colas
ColasColas
Colas
 
Segmentacion de memoria
Segmentacion de memoriaSegmentacion de memoria
Segmentacion de memoria
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..
 
Funciones de administracion de memoria
Funciones de administracion de memoriaFunciones de administracion de memoria
Funciones de administracion de memoria
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretes
 
Modelo entidad
Modelo entidadModelo entidad
Modelo entidad
 
Estructura básica de un programa en C++
Estructura básica de un programa en C++Estructura básica de un programa en C++
Estructura básica de un programa en C++
 

Similar a Memoria dinamica

19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facilDariana Acuariogv
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++kikeMerck
 
Gestion de memoria en tiempo de ejecucion
Gestion de memoria en tiempo de ejecucionGestion de memoria en tiempo de ejecucion
Gestion de memoria en tiempo de ejecucionAndresDvila
 
Administración de memoria y apuntadores
Administración de memoria y apuntadoresAdministración de memoria y apuntadores
Administración de memoria y apuntadoresFranklin Chavez
 
Script de Punteros a Funciones
Script de Punteros a FuncionesScript de Punteros a Funciones
Script de Punteros a FuncionesAnesGy SD
 
Tema 4 - Tipos datos avanzados (III)
Tema 4 - Tipos datos avanzados (III)Tema 4 - Tipos datos avanzados (III)
Tema 4 - Tipos datos avanzados (III)Pablo Haya
 
Administración de memoria - arreglos estáticos y dinámicos
Administración de memoria - arreglos estáticos y dinámicosAdministración de memoria - arreglos estáticos y dinámicos
Administración de memoria - arreglos estáticos y dinámicosUVM
 
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSIsai Vazquez
 
1. tipos de datos abstractos
1. tipos de datos abstractos1. tipos de datos abstractos
1. tipos de datos abstractosFernando Solis
 
PRESENTACION_GESTION DE MEMORIA ESTATICA.pptx
PRESENTACION_GESTION DE MEMORIA ESTATICA.pptxPRESENTACION_GESTION DE MEMORIA ESTATICA.pptx
PRESENTACION_GESTION DE MEMORIA ESTATICA.pptxFernando Solis
 

Similar a Memoria dinamica (20)

Manejo de la memoria
Manejo de la memoriaManejo de la memoria
Manejo de la memoria
 
19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++
 
Taller 18
Taller 18Taller 18
Taller 18
 
Gestion de memoria en tiempo de ejecucion
Gestion de memoria en tiempo de ejecucionGestion de memoria en tiempo de ejecucion
Gestion de memoria en tiempo de ejecucion
 
Tema 11
Tema 11Tema 11
Tema 11
 
Administración de memoria y apuntadores
Administración de memoria y apuntadoresAdministración de memoria y apuntadores
Administración de memoria y apuntadores
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Cplus
CplusCplus
Cplus
 
Script de Punteros a Funciones
Script de Punteros a FuncionesScript de Punteros a Funciones
Script de Punteros a Funciones
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Modelo Persistente
Modelo PersistenteModelo Persistente
Modelo Persistente
 
Tema 4 - Tipos datos avanzados (III)
Tema 4 - Tipos datos avanzados (III)Tema 4 - Tipos datos avanzados (III)
Tema 4 - Tipos datos avanzados (III)
 
Modelo Dinamico
Modelo DinamicoModelo Dinamico
Modelo Dinamico
 
Administración de memoria - arreglos estáticos y dinámicos
Administración de memoria - arreglos estáticos y dinámicosAdministración de memoria - arreglos estáticos y dinámicos
Administración de memoria - arreglos estáticos y dinámicos
 
Modelo Estatico
Modelo EstaticoModelo Estatico
Modelo Estatico
 
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSESTRUCTURA DE DATOS
ESTRUCTURA DE DATOS
 
1. tipos de datos abstractos
1. tipos de datos abstractos1. tipos de datos abstractos
1. tipos de datos abstractos
 
PRESENTACION_GESTION DE MEMORIA ESTATICA.pptx
PRESENTACION_GESTION DE MEMORIA ESTATICA.pptxPRESENTACION_GESTION DE MEMORIA ESTATICA.pptx
PRESENTACION_GESTION DE MEMORIA ESTATICA.pptx
 

Memoria dinamica

  • 1.
  • 2. Es memoria que se reserva en tiempo de ejecución. Su principal ventaja frente a la estática, es que su tamaño puede variar durante la ejecución del programa.(En C, el programador es encargado de liberar esta memoria cuando no la utilice más). El uso de memoria dinámica es necesario cuando no conocemos el número de datos/elementos a tratar; sin embargo es algo más lento, ya que el tiempo ejecución depende del espacio que se va ha usar Hay que mencionar que la memoria estática es mas rápida ya que esta disponible desde que se inicio el programa.
  • 3. Su tamaño y forma es variable (o puede serlo) a lo largo de un programa, por lo que se crean y destruyen en tiempo de ejecución. Esto permite dimensionar la estructura de datos de una forma precisa: se va asignando memoria en tiempo de ejecución según se va necesitando.
  • 4. Los punteros proporcionan el soporte necesario para el potente sistema de asignación dinámica de memoria de C. ► La asignación dinámica es la forma en la que un programa puede obtener memoria mientras se está ejecutando. ► A las variables globales por ejemplo, se les asigna memoria en tiempo de compilación. ► Durante la ejecución no se pueden añadir variables globales o locales, pero existen ocasiones en las que un programa necesita usar cantidades de memoria variables.
  • 5.
  • 6. New devuelve una referencia a una posición en memoria que a guardar el tipo indicado en la sentencia new.  Tras una llamada fructífera, new devuelve un puntero. Si no hay suficiente memoria libre para satisfacer la petición, se da un fallo de asignación y devuelve un NULL.  El siguiente código asigna memoria para guardar datos de una estructura persona: persona *p; p = new persona;
  • 7.  La instrucción delete es la opuesta a new porque devuelve al sistema la memoria previamente asignada.  Una vez que la memoria ha sido liberada, puede ser reutilizada en una posterior llamada a new. Ejemplo: persona *p; p = new persona; …….. delete p;
  • 8. La biblioteca estándar de C proporciona las funciones malloc, calloc, realloc y free para el manejo de memoria dinámica. Estas funciones están definidas en el archivo de cabecera stdlib.h. MALLOC Reserva un bloque de memoria y devuelve un puntero void al inicio de la misma. Tiene la siguiente definición: void *malloc(size_t size); donde el parámetro size especifica el número de bytes a reservar. En caso de que no se pueda realizar la asignación, devuelve el valor nulo (definido en la macro NULL), lo que permite saber si hubo errores en la asignación de memoria.
  • 9. CALLOC Funciona de modo similar a malloc, pero además de reservar memoria, inicializa a 0 la memoria reservada. Se usa comúnmente para arreglos y matrices. Está definida de esta forma: void *calloc(size_t nmemb, size_t size); El parámetro nmemb indica el número de elementos a reservar, y size el tamaño de cada elemento. El ejemplo anterior se podría reescribir con calloc de esta forma:
  • 10. REALLOC La función realloc redimensiona el espacio asignado de forma dinámica anteriormente a un puntero. Tiene la siguiente definición: void *realloc(void *ptr, size_t size); Donde ptr es el puntero a redimensionar, y size el nuevo tamaño, en bytes, que tendrá. Si el puntero que se le pasa tiene el valor nulo, esta función actúa como malloc. Si la reasignación no se pudo hacer con éxito, devuelve un puntero nulo, dejando intacto el puntero que se pasa por parámetro. Al usar realloc, se debería usar un puntero temporal. De lo contrario, podríamos tener una fuga de memoria, si es que ocurriera un error en realloc.
  • 11. Cuando se redimension la memoria con realloc, si el nuevo tamaño (parámetro size) es mayor que el anterior, se conservan todos los valores originales, quedando los bytes restantes sin inicializar. Si el nuevo tamaño es menor, se conservan los valores de los primeros size bytes. Los restantes también se dejan intactos, pero no son parte del bloque regresado por la función.
  • 12. FREE La función free sirve para liberar memoria que se asignó dinámicamente. Si el puntero es nulo, free no hace nada. Tiene la siguiente definición: void free(void *ptr); El parámetro ptr es el puntero a la memoria que se desea liberar: Una vez liberada la memoria, si se quiere volver a utilizar el puntero, primero se debe reservar nueva memoria con malloc o calloc: