X-Git-Url: https://git.llucax.com/z.facultad/75.00/informe.git/blobdiff_plain/3574dc3e457331aed8212c161d539ad5f69665d5..6e74d0a5708f7882c1fe837ad413974db3275012:/source/gc.rst diff --git a/source/gc.rst b/source/gc.rst index 3141526..6abc764 100644 --- a/source/gc.rst +++ b/source/gc.rst @@ -1687,7 +1687,16 @@ utiliza para asignar nuevas celdas de forma lineal, asumiendo un *heap* contiguo, incrementando un puntero (ver figura :vref:`fig:gc-copy`). Esto se conoce como *pointer bump allocation* y es, probablemente, la forma más eficiente de asignar memoria (tan eficiente como asignar memoria en el -*stack*). +*stack*). Esto permite además evitar el problema de la *fragmentación* de +memoria [#gcfrag]_ que normalmente afectan a los otros algoritmos clásicos (o +sus *low level allocators*). + +.. [#gcfrag] La *fragmentación* de memoria sucede cuando se asignan objetos + de distintos tamaños y luego libera alguno intermedio, produciendo + *huecos*. Estos *huecos* quedan inutilizables hasta que se quiera + asignar un nuevo objeto de tamaño igual al *hueco* (o menor). Si esto no + sucede y se acumulan muchos *huecos* se dice que la memoria está + *fragmentada*. .. fig:: fig:gc-copy @@ -2403,7 +2412,7 @@ conservativismo son el :ref:`recolector actual de D ` y [BLAC08]_. .. _gc_part: -Recolección particionada +Recolección particionada / generacional ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Otra forma de reducir la cantidad de pausas y la cantidad de trabajo realizado