Articulo de referencia

Reserva de memoria

Una representación de alto nivel de un grupo de memoria. Los pools de memoria , también llamados asignación de bloques de tamaño fijo , son el uso de pools para la gestión de me...

Una representación de alto nivel de un grupo de memoria.

Los pools de memoria , también llamados asignación de bloques de tamaño fijo , son el uso de pools para la gestión de memoria que permiten la asignación dinámica de memoria . La asignación dinámica de memoria puede, y se ha logrado mediante el uso de técnicas como malloc y el operador new de C++ ; aunque son implementaciones establecidas y confiables, estas sufren de fragmentación debido a tamaños de bloque variables, no es recomendable usarlas en un sistema de tiempo real debido al rendimiento. Una solución más eficiente es preasignar una cantidad de bloques de memoria con el mismo tamaño llamado pool de memoria . La aplicación puede asignar, acceder y liberar bloques representados por manejadores en tiempo de ejecución .

Muchos sistemas operativos en tiempo real utilizan grupos de memoria, como Transaction Processing Facility .

Algunos sistemas, como el servidor web Nginx , utilizan el término "pool de memoria" para referirse a un grupo de asignaciones de tamaño variable que luego se pueden desasignar todas a la vez. Esto también se conoce como región ; consulte administración de memoria basada en regiones .

Implementación de un grupo de memoria simple

Un módulo de memoria de grupo simple puede asignar, por ejemplo, tres grupos en tiempo de compilación con tamaños de bloque optimizados para la aplicación que implementa el módulo. La aplicación puede asignar, acceder y liberar memoria a través de la siguiente interfaz:

  • Asignar memoria de los grupos. La función determinará el grupo en el que se encuentra el bloque requerido. Si todos los bloques de ese grupo ya están reservados, la función intenta encontrar uno en el grupo o grupos más grandes siguientes. Un bloque de memoria asignado se representa con un identificador .
  • Obtenga un puntero de acceso a la memoria asignada.
  • Libere el bloque de memoria asignado anteriormente.
  • El identificador se puede implementar, por ejemplo, con un unsigned int. El módulo puede interpretar el identificador internamente dividiéndolo en índice de pool, índice de bloque de memoria y una versión. El índice de pool y de bloque de memoria permiten un acceso rápido al bloque correspondiente con el identificador, mientras que la versión, que se incrementa en cada nueva asignación, permite la detección de identificadores cuyo bloque de memoria ya está liberado (debido a identificadores retenidos durante demasiado tiempo).

Grupo de memoria vs. malloc

Beneficios

  • Los grupos de memoria permiten la asignación de memoria con un tiempo de ejecución constante. La liberación de memoria para miles de objetos en un grupo es una sola operación, no una por una si se utiliza malloc para asignar memoria para cada objeto.
  • Los grupos de memoria se pueden agrupar en estructuras de árboles jerárquicos, lo que resulta adecuado para estructuras de programación especiales como bucles y recursiones .
  • Los grupos de memoria de bloques de tamaño fijo no necesitan almacenar metadatos de asignación para cada asignación, que describan características como el tamaño del bloque asignado. Esto permite un ahorro de espacio sustancial, en particular para asignaciones pequeñas.
  • Permite un comportamiento determinista en sistemas en tiempo real evitando errores de falta de memoria.

Desventajas

  • Es posible que sea necesario ajustar los grupos de memoria para la aplicación que los implementa.

Véase también

  • Grupo de memoria de tamaño fijo, rápido y eficiente
  • PGroup PJ_POOL_GROUP — Documentación del proyecto PJSIP 2.14-dev
  • Un asignador de memoria
  • Programación con pools de memoria
Retrieved from "https://en.wikipedia.org/w/index.php?title=Memory_pool&oldid=1253296098"