Duda sobre funciones inline.

Iniciado por OmarHack, 28 Marzo 2013, 13:23 PM

0 Miembros y 1 Visitante están viendo este tema.

OmarHack

¿Cuándo es mejor usar la funciones inline y cuándo no?
Se usarlas, pero no comprendo muy bien cuando debo usarlas.
I like to test things.

85

#1
'inline' es para funciones, se usa en funciones que son redundantes y que se utilizan continuamente, y el efecto que tiene es hacer que el código de la función forme parte de la función en donde se llama, en lugar de que se genere un CALL a ella.

No siempre que usés 'inline' significa que el compilador va a aceptar esa directiva, incluso se puede hacer que el compilador trate de aceptar forzadamente que una función sea 'inline' con '__forceinline', pero es cuestión de que el compilador lo acepte de todas formas.

se usa para funciones muy redundates (y pequeñas en general), no tiene sentido en otro tipo de funciones.

El efecto que se genera al usar 'inline' en funciones que se llaman en diferentes lugares y repetidas veces, es un ejecutable de mayor tamaño, que como te dije antes, no se genera un CALL a la función sino que se genera todo el código de la función para cada llamada a ella.

Aquí alguien preguntó lo mismo , podés fijarte
http://www.cplusplus.com/forum/beginner/9209/

En este topic se muestra como se usa 'inline' en 2 funciones, fijate que sólo se permiten usar dentro de la misma unidad de compilación en la que se definen.
http://foro.elhacker.net/programacion_cc/clases_de_almacenamiento-t386497.0.html


Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

OmarHack

Me ha servido de mucho tu respuesta, de todas formas aun me quedo con la duda de cuando usar inline en casos prácticos. Es decir, cuándo sé que me compensa usar inline (cuando las funciones duren 3 lineas 4, 5...) Y cuándo es mejor hacer llamadas en vez de usar inline.
I like to test things.

85

#3
http://pintucoperu.wordpress.com/2007/12/12/programacion-en-c-cuando-usar-funciones-inline/

http://stackoverflow.com/questions/1932311/when-to-use-inline-function-and-when-not-to-use-it

http://msdn.microsoft.com/en-us/library/1w2887zk(v=vs.80).aspx

funciones pequeñas, y redundantes que se llaman seguido.

EDIT:

inline sumar(a, b){

return (a+b);
}



for(int i=0; i<30; i++){

res[i] = sumar(0,i);
}


por ejemplo. No es algo tan simple como sumar pero la idea la podés captar XD.

fijate el ejemplo que muestran ak
http://en.wikipedia.org/wiki/Inline_function

lo que podés hacer es compilar un ejemplo así y fijarte en un desensamblaor como quedó el código ensamblador en el ejecutable.



Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

OmarHack

Más o menos me va quedando claro, muchas gracias :)
I like to test things.

85

modifiqué el post igualmente, pero fijate que dentro del FOR no se hace un CALL a la función por cada vuelta sino que se realiza una suma y una asignación.

por lo tanto fijate todo lo que te ahorrás
Citar
Function calls (including parameter passing and placing the object's address on the stack)
Preservation of caller's stack frame
New stack-frame setup
Return-value communication
Old stack-frame restore
Return
Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

Wofo

#6
Un ejemplo práctico lo puedes ver en una clase:

Código (cpp) [Seleccionar]

class Ejemplo {
private:
int atributo_x;

public:
inline int get_atributo_x() { return atributo_x; }
};


Lógicamente puedes encontrar muchos más ejemplos, pero el uso más típico que yo le doy es en este tipo de funciones, especialmente por su corta longitud.

OmarHack

Vale vale jejeje, me quedó claro.
I like to test things.