jueves, 23 de febrero de 2017

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.


Memoria (proceso)

La memoria es una función del cerebro que permite al organismo codificar, almacenar y recuperar la información del pasado. Algunas teorías afirman que surge como resultado de las conexiones sinápticas repetitivas entre las neuronas, lo que crea redes neuronales (la llamada potenciación a largo plazo)

Estática (mecánica)

La estática es la rama de la mecánica clásica que analiza las cargas (fuerza, par / momento) y estudia el equilibrio de fuerzas en los sistemas físicos en equilibrio estático, es decir, en un estado en el que las posiciones relativas de los subsistemas no varían con el tiempo. La primera ley de Newton implica que la red de la fuerza y el par neto (también conocido como momento de fuerza) de cada organismo en el sistema es igual a cero. De esta limitación pueden derivarse cantidades como la carga o la presión. La red de fuerzas de igual a cero se conoce como la primera condición de equilibrio, y el par neto igual a cero se conoce como la segunda condición de equilibrio.

Dinámica

La dinámica es la rama de la física que describe la evolución en el tiempo de un sistema físico en relación con los motivos o causas que provocan los cambios de estado físico y/o estado de movimiento. El objetivo de la dinámica es describir los factores capaces de producir alteraciones de un sistema físico, cuantificarlos y plantear ecuaciones de movimiento o ecuaciones de evolución para dicho sistema de operación. El estudio de la dinámica es prominente en los sistemas mecánicos (clásicos, relativistas o cuánticos), pero también en la termodinámica y electrodinámica. En este artículo se describen los aspectos principales de la dinámica en sistemas mecánicos, y se reserva para otros artículos el estudio de la dinámica en sistemas no mecánicos.


Memoria Estática 

Las técnicas de asignación de memoria estática son sencillas. La asignación de memoria puede hacerse en tiempo de compilación y los objetos están vigentes desde que comienza la ejecución del programa hasta que termina. En los lenguajes que permiten la existencia de subprogramas, y siempre que todos los objetos de estos subprogramas puedan almacenarse estáticamente se aloja en la memoria estática un registro de activación correspondiente a cada uno de los subprogramas. Estos registros de activación contendrán las variables locales, parámetros formales y valor devuelto por la función.



Consideraciones

  • Error en tiempo de ejecución de índice fuera del rango.
  • Se debe conocer con anticipación el tamaño de la estructura.
  • Se guardan en memorias adyacentes.
  • Vectores, matrices, cubos, registros,  archivos.


Memoria RAM estática


La RAM estática utiliza una tecnología completamente diferente. Podemos entenderlo como un circuito electrónico capaz de mantener un bit de memoria. Puede llevar cuatro o seis transistores con algo de cableado, pero no tiene que ser refrescado jamás. Esto hace que la RAM estática sea significativamente más rápida que la memoria dinámica. Sin embargo, al tener más partes, una celda de memoria estática ocupa mucho más espacio en un chip que una celda de memoria dinámica. Por este motivo se consigue menos memoria por cada chip, y hace que la memoria estática sea más cara.