Memoria dinámica (programación)
La memoria dinámica se refiere a
aquella memoria que no puede ser definida ya que no se conoce o no se tiene
idea del número de la variable a considerarse, la solución a este problema es
la memoria dinámica que permite solicitar memoria en tiempo de ejecución, por
lo que cuanta más memoria se necesite, más se solicita al sistema operativo. El
sistema operativo maneja la memoria gracias al uso de punteros, por la misma
naturaleza del proceso nos impide conocer el tamaño de la memoria necesaria en
el momento de compilar.
Un dato importante es que como
tal este tipo de datos se crean y se destruyen mientras se ejecuta el programa
y por lo tanto la estructura de datos se va dimensionando de forma precisa a
los requerimientos del programa, evitándonos así perder datos o desperdiciar
memoria si hubiéramos tratado de definir la cantidad de memoria a utilizar en
el momento de compilar el programa.
Diferencias, ventajas y desventajas
La memoria reservada de forma
dinámica suele estar alojada en el heap o almacenamiento libre, y la memoria
estática en el stack o pila (con excepción de los objetos de duración estática,
que se verán más adelante, los cuales normalmente se colocan en una zona
estática de datos). La pila generalmente es una zona muy limitada. El heap, en
cambio, en principio podría estar limitado por la cantidad de memoria
disponible durante la ejecución del programa y el máximo de memoria que el
sistema operativo permita direccionar a un proceso. La pila puede crecer de
forma dinámica, pero esto depende del sistema operativo. En cualquier caso, lo
único que se puede asumir es que muy probablemente dispondremos de menor espacio
en la pila que en el heap.
Otra ventaja de la memoria
dinámica es que se puede ir incrementando durante la ejecución del programa.
Esto permite, por ejemplo, trabajar con arreglos dinámicos. Aunque en C, a
partir del estándar C99 se permite la creación de arreglos cuyo tamaño se
determina en tiempo de ejecución, no todos los compiladores implementan este
estándar. Además, se sigue teniendo la limitante de que su tamaño no puede
cambiar una vez que se especifica, cosa que sí se puede lograr asignando
memoria de forma dinámica.
Una desventaja de la memoria
dinámica es que es más difícil de manejar. La memoria estática tiene una
duración fija, que se reserva y libera de forma automática. En contraste, la
memoria dinámica se reserva de forma explícita y continúa existiendo hasta que
sea liberada, generalmente por parte del programador.
La memoria dinámica puede afectar
el rendimiento. Puesto que con la memoria estática el tamaño de las variables se
conoce en tiempo de compilación, esta información está incluida en el código
objeto generado, por lo cual el proceso es muy eficiente. Cuando se reserva
memoria de manera dinámica, se tienen que llevar a cabo varias tareas, como
buscar un bloque de memoria libre y almacenar la posición y tamaño de la
memoria asignada, de manera que pueda ser liberada más adelante. Todo esto
representa una carga adicional, aunque esto depende de la implementación y hay
técnicas para reducir su impacto.
Asignación Memoria dinámica
- 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.
MANEJO DE MEMORIA DINÁMICA
También llamada almacenamiento libre
(freestore) y en estos casos el programador solicita (new) memoria para
almacenar un objeto y es responsable de liberarla (delete) para que pueda ser
reutilizada por otros objetos.
Es aquella que se reserva en
tiempo de ejecución después de leer los datos y de conocer el tamaño exacto del
problema a resolver. El sitio donde se almacenan los objetos se le denomina
HEAP = MONTÍCULO pero el sitio preciso donde se encuentra tal montículo depende
del compilador y el tipo de puntero utilizado en l reserva de memoria dinámica.
No hay comentarios:
Publicar un comentario