Título: [?] funciones inline y returns Publicado por: oxydec en 8 Abril 2011, 03:34 am Hola, tengo algunas dudas sobre el tema Inline vs funciones normales : ¿Aparte de incrementar el tamaño del ejecutable tienen alguna otra desventaja frente a las funciones no-inline? Si el tamaño del ejecutable no es un punto critico, ¿existe alguna razon para no declarar todas las funciones como inline? tema returns: Según tengo entendido las funciones inline se expanden mas o menos igual que una macro del preprocesador, entonces porque: Código ? Corregidme si me equivoco pero el return supongo que lo que hace es poner el valor de retorno en la pila, asi que por ahi se pierde eficiencia no? Por lo tanto en aquellos casos en que sea posible y el tiempo de ejecucion un factor critico, seria mejor usar macros del preprocesador? Título: Re: [?] funciones inline y returns Publicado por: Akai en 8 Abril 2011, 08:45 am Tema ventajas:
Las funciones inline tienen la ventaja de no tener la sobrecarga de saltar a la función, apilar los argumentos, luego retornar, desapilar y volver a saltar a donde estábamos. Como se podrá ver, para funciones cortas, esto supone una gran ventaja. Código
Código
la función positivo va a tardar posiblemente más en realizar todo el tema de apilado y return, que la comparación. El inline te salva eso. Añado algo: Según las optimizaciones con las que compiles, funciones sin inline definidas e implementadas en el mismo lugar, pueden ser convertidas en inline. Tema returns: Las funciones inline, se expanden como si fuesen macros, si. PERO lo hacen de una forma oscura y "misteriosa" Tu ejemplo del return, no es correcto por el hecho que return devuelve a la función superior a la actual, no en la que te encuentras. Código Eso si sería correcto para obtener un 0 en b. Como ya he dicho, las funciones inline se expanden de forma similar a las macros, PERO con mucha diferencia. En este tema comentaba eso: http://foro.elhacker.net/programacion_cc/estoy_aprendiendo-t322048.0.html Por otro lado, no tengo el conocimiento certero de como se expanden las funciones inline, pero una aproximación podria ser esta: Código
Posiblemente los return se asignen dentro del código "empotrado" del inline a la variable que va a ser asignada. El código de la función, obviamente estará entre llaves. Por otro lado, tenemos que pensar, que esto al fin y al cabo es trabajo del preprocesador, que simplemente traducirá esto a un código encerrado entre llaves (recordemos que esto crea el mismo tipo de ámbito de variables que en una función) en vez de una llamada a la misma. De esta forma, el compilador, traducirá eso a código "llano" en vez de un salto a otra posición del código. |