Expansión en línea


En informática , la expansión en línea , o en línea , es una optimización manual o del compilador que reemplaza un sitio de llamada de función con el cuerpo de la función llamada. La expansión en línea es similar a la expansión de macro , pero ocurre durante la compilación, sin cambiar el código fuente (el texto), mientras que la expansión de macro ocurre antes de la compilación y da como resultado un texto diferente que luego es procesado por el compilador.

La inserción es una optimización importante, pero tiene efectos complicados sobre el rendimiento. [1] Como regla general , un poco de inserción mejorará la velocidad con un costo de espacio muy pequeño, pero el exceso de inserción afectará la velocidad, debido a que el código en línea consume demasiado de la caché de instrucciones y también cuesta un espacio significativo. En Peyton Jones & Marlow 1999 se ofrece un estudio de la modesta bibliografía académica sobre inlining de las décadas de 1980 y 1990. [2]

La expansión en línea es similar a la expansión macro, ya que el compilador coloca una nueva copia de la función en cada lugar que se llama. Las funciones en línea se ejecutan un poco más rápido que las funciones normales, ya que se guardan los gastos generales de llamadas a funciones, sin embargo, hay una penalización de memoria. Si una función está insertada 10 veces, habrá 10 copias de la función insertadas en el código. Por lo tanto, la inserción es mejor para funciones pequeñas que se llaman con frecuencia. En C ++, las funciones miembro de una clase, si se definen dentro de la definición de la clase, están alineadas de forma predeterminada (no es necesario utilizar la palabra clave en línea ); de lo contrario, se necesita la palabra clave. El compilador puede ignorar el intento del programador de incorporar una función, principalmente si es particularmente grande.

La expansión en línea se utiliza para eliminar la sobrecarga de tiempo (exceso de tiempo) cuando se llama a una función. Suele utilizarse para funciones que se ejecutan con frecuencia. También tiene un beneficio de espacio para funciones muy pequeñas y es una transformación habilitadora para otras optimizaciones .

Sin funciones en línea, el compilador decide qué funciones incorporar. El programador tiene poco o ningún control sobre qué funciones están integradas y cuáles no. Dar este grado de control al programador permite el uso de conocimientos específicos de la aplicación para elegir qué funciones incorporar.

Normalmente, cuando se invoca una función, el control se transfiere a su definición mediante una rama o instrucción de llamada. Con la inserción, el control pasa directamente al código de la función, sin una rama o instrucción de llamada.