Después de buscar varias respuestas en un desbordamiento de pila, está claro que algunos lenguajes compilados de forma nativa tienen recolección de basura . Pero no me queda claro cómo funcionaría exactamente esto.
Entiendo cómo la recolección de basura podría funcionar con un lenguaje interpretado. El recolector de basura simplemente se ejecutaría junto con el intérprete y eliminaría los objetos no utilizados e inalcanzables de la memoria del programa. Ambos corren juntos.
¿Cómo funcionaría esto con lenguajes compilados? Tengo entendido que una vez que el compilador ha compilado el código fuente en el código de destino, específicamente el código de máquina nativo, está listo. Su trabajo está terminado. Entonces, ¿cómo podría el programa compilado ser basura recolectada también?
¿El compilador funciona con la CPU de alguna manera mientras se ejecuta el programa para eliminar objetos "basura"? ¿O el compilador incluye algún recolector mínimo de basura en el ejecutable del programa compilado?
Creo que mi última declaración tendría más validez que la primera debido a este extracto de esta respuesta en Stack Overflow :
Uno de esos lenguajes de programación es Eiffel. La mayoría de los compiladores de Eiffel generan código C por razones de portabilidad. Este código C se usa para producir código de máquina por un compilador C estándar. Las implementaciones de Eiffel proporcionan GC (y a veces incluso GC preciso) para este código compilado, y no hay necesidad de VM. En particular, el compilador VisualEiffel generó código máquina nativo x86 directamente con soporte completo de GC .
La última declaración parece implicar que el compilador incluye algún programa en el ejecutable final que actúa como un recolector de basura mientras el programa se está ejecutando.
La página en el sitio web del lenguaje D sobre la recolección de basura , que se compila de forma nativa y tiene un recolector de basura opcional, también parece indicar que algún programa en segundo plano se ejecuta junto con el programa ejecutable original para implementar la recolección de basura.
D es un lenguaje de programación de sistemas con soporte para recolección de basura. Por lo general, no es necesario liberar memoria explícitamente. Simplemente asigne según sea necesario, y el recolector de basura devolverá periódicamente toda la memoria no utilizada al conjunto de memoria disponible.
Si se usa el método mencionado anteriormente , ¿cómo funcionaría exactamente? ¿El compilador almacena una copia de algún programa de recolección de basura y la pega en cada ejecutable que genera?
¿O tengo defectos en mi pensamiento? Si es así, ¿qué métodos se utilizan para implementar la recolección de basura para los lenguajes compilados y cómo funcionarían exactamente?
malloc()
.