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

Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificaciónAlex Uhu Colli
 
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
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda HashBlanca Parra
 
Administración de memoria en java
Administración de memoria en javaAdministración de memoria en java
Administración de memoria en javaLuis Miguel De Bello
 
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
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datospepelebu1313
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesJosé Antonio Sandoval Acosta
 
arboles avl con codigo en java
arboles avl con codigo en javaarboles avl con codigo en java
arboles avl con codigo en javamarhoz
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colasknowallrpa
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de DatosMayra Romero
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteJosé Antonio Sandoval Acosta
 

La actualidad más candente (20)

Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificación
 
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
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda Hash
 
Recursividad
RecursividadRecursividad
Recursividad
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Administración de memoria en java
Administración de memoria en javaAdministración de memoria en java
Administración de memoria en java
 
Clases y objetos en Java
Clases y objetos en JavaClases y objetos en Java
Clases y objetos en Java
 
PROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOSPROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOS
 
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
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datos
 
control de concurrencia
control de concurrenciacontrol de concurrencia
control de concurrencia
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no lineales
 
arboles avl con codigo en java
arboles avl con codigo en javaarboles avl con codigo en java
arboles avl con codigo en java
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de Datos
 
Estructura de registros
Estructura de registrosEstructura de registros
Estructura de registros
 
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
 
Noción de archivo real y virtual
Noción de archivo real y virtual Noción de archivo real y virtual
Noción de archivo real y virtual
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 

Destacado

Pila dinamica y pila estatica
Pila dinamica y pila estaticaPila dinamica y pila estatica
Pila dinamica y pila estaticaJoeCorp
 
Unidad 3 estructuras lineales estaticas y dinamicas
Unidad 3 estructuras lineales estaticas y dinamicasUnidad 3 estructuras lineales estaticas y dinamicas
Unidad 3 estructuras lineales estaticas y dinamicasrehoscript
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasHuascar Génere
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Juan Astudillo
 

Destacado (6)

Pila dinamica y pila estatica
Pila dinamica y pila estaticaPila dinamica y pila estatica
Pila dinamica y pila estatica
 
Unidad 3 estructuras lineales estaticas y dinamicas
Unidad 3 estructuras lineales estaticas y dinamicasUnidad 3 estructuras lineales estaticas y dinamicas
Unidad 3 estructuras lineales estaticas y dinamicas
 
PILAS
PILASPILAS
PILAS
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 

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
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
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: