¿Cómo boost.pool logra la reutilización de la memoria asignada?
Fondo
MiPregunta anterior acerca deboost.pool
me llevó a investigar boost.pool en detalle, y ahora tengo una pregunta complementaria para finalizar mi comprensión.
Preludio
Esta referencia establece lo siguiente sobre el patrón de agrupación de objetos:
El patrón de la agrupación de objetos es un patrón de diseño creativo del software que utiliza un conjunto de objetos inicializados que se mantienen listos para usar, en lugar de asignarlos y destruirlos a pedido.
De lo que puedo decir,boost.pool
(simplificado) implementa el patrón de agrupación de objetos por medio de la asignación y administración de memoria, principalmente en función del tamaño de unelement_type
, y devuelve un puntero simple a un objeto asignado:
element_type * malloc();
void free(element_type * p);
Un simple ejemplo de impulso también muestra que no es necesario explícitamentefree
El elemento adquirido:
X * const t = p.malloc();
... // Do something with t; don't take the time to free() it.
Pregunta
Entiendo que la memoria asignada se liberará de manera segura al destruir el objeto del grupo, pero ¿cómo sabe el grupo cuando un bloque de memoria adquirido por un cliente se ha liberado de nuevo en el grupo y es reutilizable si su interfaz devuelve un puntero directo? aelement_type
, sin embargo, una llamada afree()
todavía no es necesario? es decir, ¿cómo puede el grupo de refuerzo reutilizar esta memoria si no se puede estar seguro de que la memoria aún no esté en uso? Y si no reutiliza esta memoria, ¿se considera que este es el mismo patrón que el explicado por la referencia de wiki?