Convención de llamada a función

De Wikipedia, la enciclopedia libre
Ir a la navegación Ir a la búsqueda

En ciencias de la computación, la convención de llamadas a funciones es un esquema de implementación de bajo nivel para determinar la manera en que las subrutinas reciben parámetros de su "llamador" y devuelven un resultado. Entre las diferencias que existen entre las diferentes implementaciones se encuentran el lugar donde los parámetros, valores de retorno, direcciones de retorno y "scope links" son colocados, así como la distribución de procesos (a la hora de llamar a una función), entre la subrutina "llamante" y la "llamada", y la posterior restauración del entorno tras la ejecución de la misma.

La convención de llamadas a funciones puede ser relacionada con la estrategia de evaluación de un lenguaje de programación particular, pero a menudo no es considerada como parte de la misma ya que, normalmente, la estrategia de evaluación es definida en un nivel de abstracción superior, y vista como parte del mismo lenguaje de programación, en vez de una implementación de bajo nivel de un compilador particular.

Variaciones[editar]

Las convenciones de llamadas pueden diferir en:

  • El lugar en el que los parámetros, los valores de retorno y las direcciones de retorno son colocados (en registros, en la pila, una mezcla de ambos, o en otras estructuras de memoria).
  • El orden en el que se pasan los argumentos a los parámetros formales (o las partes de un argumento complejo).
  • La forma en la que un valor de retorno (posiblemente complejo) es devuelto desde la función "llamante" a la "llamada" (mediante la pila, en un registro, o dentro del heap).
  • La forma en la que se distribuyen las tareas de preparación y limpieza, antes y después (respectivamente) de una llamada a función, entre el "llamador" y el "llamado".
  • La forma en la que se distribuyen las variables locales también puede formar parte de la convención de llamadas.

En algunos casos, las diferencias también incluyen:

  • Las convenciones en las cuales los registros pueden ser directamente utilizados por el "llamador", sin ser preservados (considerado, de otra manera, como un detalle ABI)
  • Los registros considerados como volátiles y, si lo son, cuales no necesitan ser restaurados por el "llamador" (considerado, a menudo, como un detalle ABI)