fbpx
Wikipedia

Asignación de memoria

La asignación de memoria consiste en el proceso de asignar memoria para propósitos específicos, ya sea en tiempo de compilación o de ejecución. Si es en tiempo de compilación es estática, si es en tiempo de ejecución es dinámica y si son variables locales a un grupo de sentencias se denomina automática.[1]

Asignación estática de memoria

La asignación estática de memoria consiste en el proceso de asignar memoria en tiempo de compilación antes de que el programa asociado sea ejecutado, a diferencia de la asignación dinámica o la automática donde la memoria se asigna a medida que se necesita en tiempo de ejecución.[2]

Una aplicación de esta técnica conlleva que un módulo de programa (por ejemplo función o subrutina) declara datos estáticos de forma local, de forma que estos datos son inaccesibles desde otros módulos a menos que se les pasen referenciados como parámetros o que les sean devueltos por la función. Se mantiene una copia simple de los datos estáticos, accesible a través de llamadas a la función en la cual han sido declarados.

El uso de variables estáticas dentro de una clase en la programación orientada a objetos permite que una copia individual de tales datos se comparta entre todos los objetos de esa clase.

Las constantes conocidas en tiempo de compilación, como literales de tipo cadena, se asignan normalmente de forma estática. En programación orientada a objetos, el método usual para las tablas de clases también es la asignación estática de memoria.

Asignación automática de memoria

Las variables automáticas son variables locales a un bloque de sentencias (subrutina, función o procedimiento). Pueden ser asignadas automáticamente en la pila de datos cuando se entra en el bloque de código. Cuando se sale del bloque, las variables son automáticamente desasignadas.[3]​ Las variables automáticas tendrán un valor sin definir cuando son declaradas, por tanto es buena práctica de programación inicializarlas con un valor válido antes de usarlas.

Asignación dinámica de memoria

En ciencia de la computación, asignación dinámica de la memoria es la asignación de almacenamiento de memoria para utilización por parte de un programa de computador durante el tiempo de ejecución de ese programa. Es una manera de distribuir la propiedad de recursos de memoria limitada entre muchas piezas de código y datos. Un objeto asignado dinámicamente permanece asignado hasta que es desasignado explícitamente, o por el programador o por un recolector de basura; esto es notablemente diferente de la asignación automática de memoria y de la asignación estática de memoria (la de las variables estáticas). Se dice que tal objeto tiene tiempo de vida dinámico.[4]

Soluciones para los problemas de asignación

La tarea de satisfacer una petición de asignación, la cual conlleva encontrar un bloque de memoria sin usar de cierto tamaño en el heap, es un problema complicado. Se han propuesto una amplia variedad de soluciones, incluyendo listas de bloques libres, Paginación, y Asignación buddy de memoria.

El problema principal para la mayoría de algoritmos de asignación de memoria dinámica es evitar la fragmentación interna y externa mientras se mantiene la eficiencia del algoritmo. También, la mayoría de algoritmos en uso tienen el problema de que un número grande de pequeñas asignaciones pueden causar el desaprovechamiento del espacio debido a la recolección de metadatos; así la mayoría de los programadores intentan evitar esto, a veces usando una estrategia llamada chunking.

Asignación de bloques de tamaño fijo

Una solución es tener una lista enlazada LIFO de bloques de memoria de tamaño fijo. Esto funciona bien para sistemas empotrados simples.

Algoritmo Buddy

Otra solución es tener un asignador buddy de bloques binarios. En este sistema, la memoria se asigna desde un gran bloque de memoria que es tamaño potencia de dos. Si el bloque es más del doble de grande de lo necesario, se parte en dos. Se selecciona una de las dos mitades, y el proceso se repite (comprobando el tamaño otra vez y partiendo si se necesita) hasta que el bloque sea justamente el necesitado.

Todos los segmentos de memoria de un tamaño particular son guardados en una lista enlazada ordenada o una estructura de datos en árbol. Cuando se libera un bloque, se compara con su buddy(vecino). Si los dos están libres, son combinados y colocados en la lista de bloques buddy de siguiente mayor tamaño. (Cuando un bloque es asignado, el asignador empezará con el bloque grande suficientemente pequeño para evitar romper bloques innecesariamente).

Nótese que los asignadores buddy de bloques no son únicamente para los Sistemas Operativos de Tiempo-Real (RTOS); ellos también son usados en sistemas operativos de propósito general (tales como Microsoft Windows y Linux).

Asignación de memoria basada en Heap

En la asignación de memoria basada en heap, la memoria es asignada desde un gran área común de memoria libre (sin usar) llamada heap (también llamada almacén de libres o 'memoria del montón'). "El heap" no tiene nada que ver con la estructura de datos Heap (o Montículo). El tamaño de la asignación de memoria puede ser determinado en tiempo de ejecución, y el tiempo de vida de la asignación no es dependiente del procedimiento actual o del marco de pila. La región de memoria asignada es accedida indirectamente, normalmente por medio de una referencia. El algoritmo preciso usado para organizar el área de memoria y asignar y desasignar los trozos está oculto detrás de una interfaz abstracta y puede usar cualquiera de los métodos descritos antes.

En contraste, la memoria de la pila de llamadas es normalmente de tamaño limitado y el tiempo de vida de la asignación depende de la duración de las funciones correspondientes.

Véase también

Referencias

  1. Definición de Asignación de memoria el 21 de agosto de 2008 en Wayback Machine.
  2. Alfred V. Aho,, Alfred V.; Ravi Sethi, Jeffrey D Ullman, Pedro Flores Suárez, Pere Botella i López (1998). Compiladores. ISBN 9684443331. pag. 413. 
  3. Louden, Kenneth C. Construcción de compiladores. ISBN 9706862994. pag.301. 
  4. Tanenbaum, Andrew S.; Roberto Escalona García (2004). Sistemas operativos modernos. ISBN 9702603153. pag. 198. 
  •   Datos: Q1061927

asignación, memoria, asignación, memoria, consiste, proceso, asignar, memoria, para, propósitos, específicos, tiempo, compilación, ejecución, tiempo, compilación, estática, tiempo, ejecución, dinámica, variables, locales, grupo, sentencias, denomina, automátic. La asignacion de memoria consiste en el proceso de asignar memoria para propositos especificos ya sea en tiempo de compilacion o de ejecucion Si es en tiempo de compilacion es estatica si es en tiempo de ejecucion es dinamica y si son variables locales a un grupo de sentencias se denomina automatica 1 Indice 1 Asignacion estatica de memoria 2 Asignacion automatica de memoria 3 Asignacion dinamica de memoria 4 Soluciones para los problemas de asignacion 4 1 Asignacion de bloques de tamano fijo 4 2 Algoritmo Buddy 4 3 Asignacion de memoria basada en Heap 5 Vease tambien 6 ReferenciasAsignacion estatica de memoria EditarLa asignacion estatica de memoria consiste en el proceso de asignar memoria en tiempo de compilacion antes de que el programa asociado sea ejecutado a diferencia de la asignacion dinamica o la automatica donde la memoria se asigna a medida que se necesita en tiempo de ejecucion 2 Una aplicacion de esta tecnica conlleva que un modulo de programa por ejemplo funcion o subrutina declara datos estaticos de forma local de forma que estos datos son inaccesibles desde otros modulos a menos que se les pasen referenciados como parametros o que les sean devueltos por la funcion Se mantiene una copia simple de los datos estaticos accesible a traves de llamadas a la funcion en la cual han sido declarados El uso de variables estaticas dentro de una clase en la programacion orientada a objetos permite que una copia individual de tales datos se comparta entre todos los objetos de esa clase Las constantes conocidas en tiempo de compilacion como literales de tipo cadena se asignan normalmente de forma estatica En programacion orientada a objetos el metodo usual para las tablas de clases tambien es la asignacion estatica de memoria Asignacion automatica de memoria EditarLas variables automaticas son variables locales a un bloque de sentencias subrutina funcion o procedimiento Pueden ser asignadas automaticamente en la pila de datos cuando se entra en el bloque de codigo Cuando se sale del bloque las variables son automaticamente desasignadas 3 Las variables automaticas tendran un valor sin definir cuando son declaradas por tanto es buena practica de programacion inicializarlas con un valor valido antes de usarlas Asignacion dinamica de memoria EditarArticulo principal Memoria dinamica En ciencia de la computacion asignacion dinamica de la memoria es la asignacion de almacenamiento de memoria para utilizacion por parte de un programa de computador durante el tiempo de ejecucion de ese programa Es una manera de distribuir la propiedad de recursos de memoria limitada entre muchas piezas de codigo y datos Un objeto asignado dinamicamente permanece asignado hasta que es desasignado explicitamente o por el programador o por un recolector de basura esto es notablemente diferente de la asignacion automatica de memoria y de la asignacion estatica de memoria la de las variables estaticas Se dice que tal objeto tiene tiempo de vida dinamico 4 Soluciones para los problemas de asignacion EditarLa tarea de satisfacer una peticion de asignacion la cual conlleva encontrar un bloque de memoria sin usar de cierto tamano en el heap es un problema complicado Se han propuesto una amplia variedad de soluciones incluyendo listas de bloques libres Paginacion y Asignacion buddy de memoria El problema principal para la mayoria de algoritmos de asignacion de memoria dinamica es evitar la fragmentacion interna y externa mientras se mantiene la eficiencia del algoritmo Tambien la mayoria de algoritmos en uso tienen el problema de que un numero grande de pequenas asignaciones pueden causar el desaprovechamiento del espacio debido a la recoleccion de metadatos asi la mayoria de los programadores intentan evitar esto a veces usando una estrategia llamada chunking Asignacion de bloques de tamano fijo Editar Una solucion es tener una lista enlazada LIFO de bloques de memoria de tamano fijo Esto funciona bien para sistemas empotrados simples Algoritmo Buddy Editar Otra solucion es tener un asignador buddy de bloques binarios En este sistema la memoria se asigna desde un gran bloque de memoria que es tamano potencia de dos Si el bloque es mas del doble de grande de lo necesario se parte en dos Se selecciona una de las dos mitades y el proceso se repite comprobando el tamano otra vez y partiendo si se necesita hasta que el bloque sea justamente el necesitado Todos los segmentos de memoria de un tamano particular son guardados en una lista enlazada ordenada o una estructura de datos en arbol Cuando se libera un bloque se compara con su buddy vecino Si los dos estan libres son combinados y colocados en la lista de bloques buddy de siguiente mayor tamano Cuando un bloque es asignado el asignador empezara con el bloque grande suficientemente pequeno para evitar romper bloques innecesariamente Notese que los asignadores buddy de bloques no son unicamente para los Sistemas Operativos de Tiempo Real RTOS ellos tambien son usados en sistemas operativos de proposito general tales como Microsoft Windows y Linux Asignacion de memoria basada en Heap Editar En la asignacion de memoria basada en heap la memoria es asignada desde un gran area comun de memoria libre sin usar llamada heap tambien llamada almacen de libres o memoria del monton El heap no tiene nada que ver con la estructura de datos Heap o Monticulo El tamano de la asignacion de memoria puede ser determinado en tiempo de ejecucion y el tiempo de vida de la asignacion no es dependiente del procedimiento actual o del marco de pila La region de memoria asignada es accedida indirectamente normalmente por medio de una referencia El algoritmo preciso usado para organizar el area de memoria y asignar y desasignar los trozos esta oculto detras de una interfaz abstracta y puede usar cualquiera de los metodos descritos antes En contraste la memoria de la pila de llamadas es normalmente de tamano limitado y el tiempo de vida de la asignacion depende de la duracion de las funciones correspondientes Vease tambien EditarPila estructura de datos Pila de llamadas MallocReferencias Editar Definicion de Asignacion de memoria Archivado el 21 de agosto de 2008 en Wayback Machine Alfred V Aho Alfred V Ravi Sethi Jeffrey D Ullman Pedro Flores Suarez Pere Botella i Lopez 1998 Compiladores ISBN 9684443331 pag 413 La referencia utiliza el parametro obsoleto coautores ayuda Louden Kenneth C Construccion de compiladores ISBN 9706862994 pag 301 Tanenbaum Andrew S Roberto Escalona Garcia 2004 Sistemas operativos modernos ISBN 9702603153 pag 198 Datos Q1061927 Obtenido de https es wikipedia org w index php title Asignacion de memoria amp oldid 134737410, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos