Funciones en línea en C++
-
Por qué se utilizan funciones
inline
en C++ -
Implementar funciones
en línea
en C++ -
Implementar
constructor
ydestructor
como funcionesen línea
en C++ -
Ventajas y desventajas de implementar funciones
en línea
en C++
Este artículo discutirá las funciones inline
en C++, cómo implementarlas y las ventajas y desventajas de usarlas.
Por qué se utilizan funciones inline
en C++
Cada vez que ejecutamos un programa, la CPU almacena la dirección de memoria de la instrucción después de la llamada a la función; copia los argumentos en la pila y transfiere el control a la función especificada.
Luego, la CPU ejecuta el código, devuelve el valor en una ubicación de memoria específica y vuelve a la función llamada nuevamente. Podría crear una sobrecarga adicional si la mayor parte del tiempo se dedica a cambiar en lugar de ejecutar la función.
Esta sobrecarga es insignificante en funciones grandes que realizan tareas complejas que requieren un uso intensivo de la CPU, ya que la mayor parte del tiempo se dedica solo a la ejecución.
Sin embargo, esta sobrecarga se vuelve significativa cuando tenemos muchas funciones pequeñas que solo realizan tareas básicas; la mayor parte del tiempo se dedica a cambiar, y poco o nada se dedica a la ejecución.
Por lo tanto, el concepto en línea
puede ser útil cuando tenemos muchas funciones pequeñas para ahorrar tiempo de conmutación y aumentar la eficiencia.
Cada vez que una función se declara como en línea
en el código en tiempo de compilación, en lugar de asignar una dirección en la llamada a la función, copia todo el código de la función y lo coloca en ese lugar.
Sintaxis:
inline return_type function_name(arguments)
{
...
}
Una función en línea
es solo una solicitud al compilador, por lo que el compilador puede ignorarla si:
- la función tiene variables estáticas;
- la función tiene sentencias
goto
oswitch
; - la función es recursiva;
- la función tiene bucles.
El concepto de en línea
se usa generalmente con clases.
Implementar funciones en línea
en C++
Código de ejemplo:
#include <iostream>
using namespace std;
class myClass {
int a, b;
public:
void sum();
};
inline void myClass ::sum() {
cout << "Enter first value:";
cin >> a;
cout << "Enter second value:";
cin >> b;
cout << "Sum of two numbers is " << a + b << endl;
}
int main() {
cout << "Program using inline function\n";
myClass obj;
obj.sum();
}
En el código anterior, declaramos la función como en línea
mientras la definimos porque es una buena práctica de programación escribir la definición real de la función en línea
fuera de la clase que dentro de la clase.
Sin embargo, una definición de función en una clase es una definición de función en línea
por defecto, incluso sin usar la palabra clave en línea
.
Producción :
Program using inline function
Enter first value:12
Enter second value:13
Sum of two numbers is 25
Implementar constructor
y destructor
como funciones en línea
en C++
Usando el ejemplo anterior y haciendo funciones en línea
fuera de la clase al definirla, podemos incluso hacer constructor
y destructor
como en línea
.
Código de ejemplo:
#include <iostream>
using namespace std;
class myClass {
int a, b;
public:
myClass();
~myClass();
void sum();
};
inline myClass::myClass() {
a = 100;
b = 200;
}
inline myClass::~myClass() { cout << "destroying the object\n"; }
inline void myClass ::sum() {
cout << "Sum of two numbers is " << a + b << endl;
}
int main() {
cout << "Program using inline function\n";
myClass obj;
obj.sum();
}
Producción :
Program using inline function
Sum of two numbers is 300
destroying the object
Ventajas y desventajas de implementar funciones en línea
en C++
Ahora, veamos algunas de las ventajas de implementar funciones en línea
:
- Se reduce la sobrecarga de la llamada de función.
- Ahorra la sobrecarga de una llamada de retorno de una función.
- Ahorra la sobrecarga de empujar y sacar variables en la pila.
Aunque útil, también tiene algunas desventajas:
- El tamaño del archivo ejecutable binario puede aumentar si usamos demasiadas funciones
en línea
porque aquí ocurrirá la duplicación del mismo código. - Demasiadas funciones en línea pueden reducir la tasa de aciertos de caché para las instrucciones, lo que afecta la velocidad de obtención de instrucciones de la memoria caché a la memoria principal.
- En los sistemas embebidos donde el tamaño del código es más importante que la velocidad, las funciones
en línea
no serán útiles. - Podría ocurrir una paliza, lo que degradará el rendimiento de la memoria de la computadora.