12. in-line vs out-line

La función en línea es una de las características importantes de C ++.

class A
{
  void member(){}
};

Entonces, primero entendamos por qué se utilizan las funciones en línea y cuál es el propósito de la función en línea.

Cuando el programa ejecuta la instrucción de llamada de función, la CPU almacena la dirección de memoria de la instrucción que sigue a la llamada de función, copia los argumentos de la función en la pila y finalmente transfiere el control a la función especificada. Luego, la CPU ejecuta el código de función, almacena el valor de retorno de la función en una ubicación / registro de memoria predefinido y devuelve el control a la función que llama. Esto puede convertirse en una sobrecarga si el tiempo de ejecución de la función es menor que el tiempo de conmutación de la función llamante a la función llamada (destinatario). Para funciones que son grandes y / o realizan tareas complejas, la sobrecarga de la llamada a la función suele ser insignificante en comparación con la cantidad de tiempo que la función tarda en ejecutarse.

Sin embargo, para las funciones pequeñas de uso común, el tiempo necesario para realizar la llamada a la función suele ser mucho mayor que el tiempo necesario para ejecutar realmente el código de la función. Esta sobrecarga se produce para funciones pequeñas porque el tiempo de ejecución de la función pequeña es menor que el tiempo de conmutación. C ++ proporciona funciones en línea para reducir la sobrecarga de llamadas a funciones.

La función en línea es una función que se expande en línea cuando se llama. Cuando se llama a la función en línea, el código completo de la función en línea se inserta o sustituye en el punto de llamada de la función en línea. Esta sustitución la realiza el compilador de C ++ en tiempo de compilación. La función en línea puede aumentar la eficiencia si es pequeña.

Las funciones de out line se pueden crear durante las compilaciones optimizadas.

class B
{
  void member();
};

// Implementation file (.cpp)

void B::member(){}

Representan código que no se ejecuta normalmente, específicamente código que no se ejecuta durante la ejecución de entrenamiento utilizado para generar la retroalimentación para la compilación optimizada final, este código no se inserta en la línea de llamada de la función, si no en otro lugar