Mem Dinamica

Trabajo Práctico Nº6 Memoria Dinámica Integrantes: • • • • Curso: 4º3. Avincola Rodrigo Año: 2018. Castagna Lucas Sa

Views 104 Downloads 0 File size 168KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

  • Author / Uploaded
  • Tommy
Citation preview

Trabajo Práctico Nº6 Memoria Dinámica Integrantes: • • • •

Curso: 4º3.

Avincola Rodrigo

Año: 2018.

Castagna Lucas Santiago

Materia: Algoritmos y estructura de datos.

Castrilli Fausto Bosotina Rodrigo Valentín.

Índices



Puntero.



¿Que es memoria dinámica?.



Operadores.



Diferencias entre memoria estática y dinámica.



Ventajas y Desventajas de la Memoria Dinámica.



Reservar espacio dinámicamente en vectores y matrices.



Vectores dinámicos.



Matrices Dinámicas.



¿Qué pasa cuando se reserva memoria de mas?



Fuentes.

Punteros Para la gestión de memoria dinámica vamos a necesitar tener un mínimo conocimiento de como funciona un puntero y sus operadores. ¿Qué es un puntero? Es un tipo de dato que almacena direcciones de memoria de una variable, para utilizar esto tenemos que poner un asterisco antes del nombre de nuestra variable.

Operador de Direccion (&) Este nos permite acceder a la dirección de memoria de una variable.

Operador de Indireccion (*) Este sirve para declarar una variable como tipo puntero y para ver el valor que se encuentra en dicha dirección.

Memoria Dinámica (¿Qué es?) 

Es la memoria que puede ser solicitada durante la ejecución de un programa , y que, a diferencia de la memoria estática su tamaño puede variar. Esta memoria también tiene que ser liberada cuando dejemos de necesitarla.



¿Para qué sirve?



Sirve para los casos en los cuales no conocemos el numero de datos o elementos con los que vamos a tratar.



Para la administración de la memoria dinámica, C++ cuenta con dos operadores “new” y “delete” (para poder utilizar dichos operadores debemos agregar al principio de nuestro programa la librería ).

Operadores que vamos a necesitas a la hora de gestionar memoria dinámica. Operador new Permite reservar memoria y puede ser utilizado para cualquier tipo de variables (int, float, char, etc.) y también en estructuras o clases como vectores y matrices. int*puntero = new int[1000]; Puentero apunta a una zona de 1000 enteros. Operador delete Sirve para liberar la memoria antes reservada con el operador “new” y es importante no olvidarse de hacer esto ya que podría resultar en la pérdida de memoria. Delete puntero;

Diferencias entre memoria estática y dinámica Estática

Dinámica

Asignación

Es en tiempo de compilación

Es en tiempo de ejecución

Administración

Lo usa y administra el compilador mediante el pasaje a assembler y no se puede controlar desde dentro del programa

Lo administra el programador mediante llamadas a funciones de la librería estándar de C++ (New/ Delete)

Almacenamiento

Stack o Pila

Heap o Almacenamiento Libre

Adaptación de memoria

Almacena datos antes de la ejecución

Almacena datos en ejecución

Manejo de memorias

La memoria estática es simple ya que tiene una duración fija, que se reserva y libera de forma automática

La memoria dinámica es difícil de utilizar ya que se reserva previamente y continua existiendo hasta que sea liberada, generalmente por el programador

Rendimiento

Con la memoria estática el tamaño de las variables se conoce en el tiempo de compilación, esta información esta incluida en el código del objeto generado por lo cual es eficiente

Puede afectar al rendimiento, cuando se reserva en memoria dinámica se tienen que llevar a cabo tareas, como buscar un bloque de memoria libre y almacenar la posición y tamaño de la memoria, para que pueda ser liberada.

Ventajas y Desventajas de la Memoria Dinámica Ventajas

Desventajas

 Es posible disponer de un espacio de memoria  Es difícil implementar estructuras de datos complejas. arbitrario que dependa de información dinámica (disponible sólo en ejecución): Toda  Es difícil de manejar. esa memoria que maneja es implementada por  Puede afectar el rendimiento. Se tienen que el programador cuando fuese necesario. llevar a cabo varias tareas, como buscar un  Otra ventaja de la memoria dinámica es que se bloque de memoria libre y almacenar la puede ir incrementando durante la ejecución posición y tamaño de la memoria asignada, de del programa. Esto permite, por ejemplo, manera que pueda ser liberada más adelante. trabajar con arreglos dinámicos. 

Es memoria que se reserva en tiempo de ejecución. Su tamaño puede variar durante la ejecución del programa y puede ser liberado mediante la función free.

Como reservar espacio dinámicamente en vectores y matrices. 

Vectores dinámicos.

A diferencia de los vectores estáticos en los cuales la cantidad de memoria es asignada y el tamaño es definido, estos pueden tener una cantidad variable de datos.

Para poder utilizar vectores dinámicos necesitamos saber que tenemos que utilizar el operador new[] para reservar memoria dinámica y el operador delete[] para liberarla.

Vectores Dinámicos A diferencia de los vectores estáticos en los cuales la cantidad de memoria es asignada y el tamaño es definido, estos pueden tener una cantidad variable de datos. En los casos de las estructuras, el operador new y delete se le agregan dos corchetes que indican la cantidad de espacios que posee dicha estructura. Ejemplo: int *vector; vector = new int [5]; for (int i = 0; i < 5; i++) { vector [i] = i*3; cout filas >> colum; matriz [fil][colum];

Como declarar una matriz dinámica. (Una de las formas que hay). Para lograr crear la matriz bidimensional tenemos que saber que esta está conformada por dos partes: primero, un vector de pu nteros y segundo, una serie de vectores de elementos. Cada uno de los punteros del primer vector va a apuntar a un vector de elementos.

int filas, colum; Cout filas >> colum; Int **matriz = new int*[filas] For (i = 0; i < colum; i++) { matriz[i] = new int [colum]; } ¿Cómo libero la memoria cuando trato con matrices? Primero elimino cada vector de la matriz, así: for (int i = 0; i < filas; i++){ delete [] matriz[i]; } Y luego elimino el vector principal: delete matriz[];

¿Que pasa cuando reservo memoria de mas? 

Si la función New es incapaz de conceder el bloque (por ejemplo no hay memoria suficiente), devuelve un puntero nulo.



Si se asigna espacio de mas y este no es eliminado el programa devolverá un puntero a un valor nulo

Fuentes de información. PDF: 1.

Clase Labo 04-Memoria Dinámica en C

Paginas Web: 

https://codingornot.com/diferencias-entre-heap-y-stack



https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_din%C3%A1mico_de_memoria#Memoria_dinámica



http://sopa.dis.ulpgc.es/fso/cpp/intro_c/introc75.htm



https://prezi.com/hoguxp55jpcl/asignacion-dinamica-de-memoria-y-administracion-de-memoria-c/



http://codigomaldito.blogspot.com/2006/01/memoria-dinamica-new-y-delete.html



https://ronnyml.wordpress.com/2009/07/04/vectores-matrices-y-punteros-en-c/



https://www.genbeta.com/desarrollo/punteros-y-referencias



https://alanchavez.com/matrices-dinamicas-en-c-desmitificadas/



http://mauricioavilesc.blogspot.com/2015/08/matriz-dinamica-en-c.html



https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Punteros



Volver al Índice.