Estoy desarrollando un compilador para un lenguaje similar a Scheme, y estoy leyendo la tesis de Dybvig. En él, dice que logró la mayor parte de su ganancia de rendimiento al asignar marcos de llamadas en la pila en lugar de en el montón. Hay varios trucos que deben hacerse para hacer que esto funcione en presencia de cierres y continuaciones.¿Qué hace que un Esquema basado en el montón sea más lento que un Esquema basado en la pila?
Mi pregunta es de dónde viene esta ganancia de rendimiento? ¿Es puramente porque ponemos menos tensión en el recolector de basura?
Dicho de otra manera: suponiendo que tenemos una cantidad infinita de memoria, ¿la pila de marcos de llamadas asignados seguiría siendo más rápida que los marcos de llamadas asignados?
Mencionas "el recolector de basura": ¿cuál es tu lenguaje de implementación? –
Mi lenguaje de implementación es C. Pero debo aclarar, me refiero a la ganancia de rendimiento para el código compilado, * no * ganancia de rendimiento para el propio compilador. –
Nota realmente una respuesta pero: (a) lidiar con el montón lleva más tiempo ya que requiere escanearlo (no es lineal como la pila); (b) Prácticamente todas las arquitecturas de CPU ponen un énfasis adicional en hacer que el acceso a la pila sea lo más rápido posible, y no así con el montón. –