Por último, siendo que el recolector de basura es parte del programa de forma
indirecta, es común ver en la literatura que se direfencia entre
2 partes del programa, el recolector de basura y el programa en sí. Dado que
- para el recolector de basura, lo único que interesa conocer del programa en
- sí son los cambios al grafo de conectividad de las celdas, normalmente se lo
- llama *mutator* (mutador).
+para el recolector de basura, lo único que interesa conocer del programa en
+sí son los cambios al grafo de conectividad de las celdas, normalmente se lo
+llama *mutator* (mutador).
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