¿Quien soy?

Soy Daniel Alejandro Bulnes Reyna, mi número de matricula es 1441186 y estoy inscrito en la materia de Lenguajes de programación en el horario de Martes M1 y Lab. Lenguajes de programación los Jueves a V1, las dos con la Dra. Elisa Schaeffer.



Espero que mi blog les agrade y puedan comentar en el, ya sea positiva o negativamente, y que cada dia mejoren mas los posts.



jueves, 18 de noviembre de 2010

Funciones Inline - Lenguajes de Programación (Puntos Extra)

Este post lo dedico a una investigación sobre las funciones INLINE que me llamo mucho la atención en un post que puso la Dra. sobre una entrada de mi compañera Anais.

De lo poco que investigue, vi que estas funciones van dedicadas mas sobre la programación orientada a objetos, y de lo que tratan es de que como estas son pequeñas nos ayudan a ahorrar mas tiempo a la hora de la compilación ya que estas declaradas como inline, se inserta en un punto del codigo donde se invoca a la función, en lugar de hacerlo en otro lugar y hacer una llamada.
Esto nos da una gran ventaja, el código de estas funciones se ejecuta más rápidamente, ya que se evita usar la pila para pasar parámetros y se evitan las instrucciones de salto y retorno. También tiene un inconveniente: se generará el código de la función tantas veces como ésta se use, con lo que el programa ejecutable final puede ser mucho más grande.

Es por esos dos motivos por los que sólo se usan funciones inline cuando las funciones son pequeñas. Hay que elegir con cuidado qué funciones declararemos inline y cuales no, ya que el resultado puede ser muy diferente dependiendo de nuestras decisiones.

Hay dos maneras de declarar una función como inline:

La primera:
Las funciones que se definen dentro de la declaración de la clase son inline implícitamente. Por ejemplo:

class Ejemplo {
public:
Ejemplo(int a = 0) : A(a) {}
private:
int A;
};

En el ejemplo hemos definido el constructor de la clase Ejemplo dentro de la propia declaración, esto hace que se considere como inline. Cada vez que declaremos un objeto de la clase Ejemplo se insertará el código correspondiente a su constructor.

Si queremos que la clase Ejemplo no tenga un constructor inline deberemos declararla y definirla así:

class Ejemplo {
public:
Ejemplo(int a = 0);
private:
int A;
};
Ejemplo::Ejemplo(int a) : A(a) {}

En este caso, cada vez que declaremos un objeto de la clase Ejemplo se hará una llamada al constructor y sólo existirá una copia del código del constructor en nuestro programa.

La otra forma de declarar funciones inline es hacerlo explícitamente, usando la palabra reservada inline. Con el mismo ejemplo que expusimos anteriormente seria asi:

class Ejemplo {
public:
Ejemplo(int a = 0);
private:
int A;
};
inline Ejemplo::Ejemplo(int a) : A(a) {}


Espero que con este ejemplo que presente en sus tres versiones de declarar este tipo de funciones haya quedado claro a lo que se refieren.




Alumno:Daniel Alejandro Bulnes Reyna
Matricula: 1441186
Clase: Martes M1-M3
Dra. Elisa Scheaffer

1 comentario:

  1. En realidad unline no tiene que ver con las clases y se puede poner en ANSI-C también. Checa http://www.greenend.org.uk/rjk/2003/03/inline.html e intenta poner otra entrada sobre lo que realmente son - antes de la mañana del lunes 22 si quieres los puntos ;)

    ResponderEliminar