¿Es necesaria la recolección de basura en un lenguaje basado en pila?

14

¿Cuál es la necesidad de recolección de basura (GC) en un lenguaje basado en pila? En un lenguaje como Forth o RPL (en calculadoras HP ), ¿hay una necesidad de recolección de basura? ?

Pensaría, ya que la salida se extrae de la pila, que no habría ninguna necesidad. ¿Me estoy perdiendo algo?

    
pregunta Todd Moses 15.09.2011 - 16:41

4 respuestas

13

GC normalmente se aplica a la memoria asignada en el montón. No estoy familiarizado con Forth o RPL, pero si no hay un montón, y todo está almacenado en una pila global, entonces no hay nada que GC pueda hacer.

    
respondido por el Mike Baranczak 15.09.2011 - 16:53
12

Sí, tienes razón. Pero la base de pila es solo una parte de toda la historia. Por ejemplo, el intérprete de bytecode de Java también se basa en la pila (el código compilado funciona, por razones de eficiencia, de manera diferente). Esto nos dice que cualquier idioma se puede transformar en un lenguaje de pila.

Lo que importa son los objetos fuera de la pila, aquellos que pueden sobrevivir a la ejecución del método actual. Mientras el idioma no tenga nada como malloc o new , no hay tales objetos y no necesita delete ni GC.

Un lenguaje que carece de asignación de memoria dinámica es bastante limitado en su utilidad.

    
respondido por el maaartinus 15.09.2011 - 16:56
1

Se requiere la recolección de basura si el idioma va a admitir las estructuras de datos dinámicos de forma inherente. Lo cual es casi una necesidad si quiere hacer algo más allá del nivel C. Sin él, solo tiene estructuras de datos de tamaño fijo y la administración de la memoria. Por supuesto, eso es lo que hace Forth original, pero probablemente no sea algo que quieras hacer hoy, a menos que solo estés haciendo codificación de sistemas de bajo nivel.

    
respondido por el trans 28.07.2016 - 17:57
1

La recolección de basura no es necesaria si el lenguaje usa una asignación estática en lugar de una asignación de pila. Por ejemplo, Fortran 77 con la opción -s (almacenamiento estático) asigna toda la memoria cuando se inicia el programa, por lo tanto, no se produce asignación de memoria en el tiempo de ejecución que se liberará. Si bien requiere cierta disciplina, es posible escribir programas, especialmente simulaciones para usar la asignación de memoria estática. La asignación estática elimina cualquier pérdida de memoria y conduce a un excelente rendimiento del caché, ya que el compilador puede usar el análisis estático para determinar qué cargar en el caché.

    
respondido por el Michael Shopsin 28.07.2016 - 18:06

Lea otras preguntas en las etiquetas