Enlazadores, Ligadores y Cargadores

Embed Size (px)

DESCRIPTION

Enlazadores, Ligadores y Cargadores

Citation preview

LIGADOR Es un programa que enlaza todos los programas o mdulos obteniendo lo que denominamos programa ejecutable.Es un programa que enlaza distintos mdulos o programas que poseen subprogramas. Adems incorporan las denominadas rutinas de libreras en caso de solicitarlas el propio programa.La generacin de un mdulo ejecutable a partir de una coleccin de procedimientos traducidos independientemente requiere un ligador.

FUNCIN Los editores de ligado pueden efectuar varias funciones ltimas a dems de la simple preparacin de un programa objeto para su ejecucin estos tambin se pueden utilizar para construir paquetes de subrutinas u otras secciones que suelen utilizar juntas. Esto puede ser til al tratar con bibliotecas de subrutinas que manejan lenguajes de programacin de alto nivel. Comparados con los cargadores de ligadores los editores de ligado en general tienden a ofrecer mayor flexibilidad y control con el correspondiente incremento e complejidad y sobrecarga.

La tarea principal del enlazador es resolver referencias externas lleva a cabo la siguiente etapa del proceso de traduccin enlazando los mdulos ensambladores y los acervos para formar un programa completo. En algunos sistemas el cargador simplemente copia el programa ejecutable a las posiciones de memorias apropiadas.SUS FUNCIONES PRINCIPALES SON:Enlazar cdigo intermedio compilado independientemente en un solo mdulo de carga resolviendo las diferencias entre Tokens. Incorpora las denominadas rutinas de libreras en caso de solicitarlas el propio programa. Su funcin es reducir procedimientos traducidos por separado y enlazarlos para que se ejecuten como una unidad llamada programa binario ejecutable.TIPOS EDITORES DE LIGADO. La diferencia fundamental entre un editor de ligado y un cargador ligador es: Primero se ensambla o compila el programa fuente, produciendo un programa objeto (que puede contener varias secciones de control diferentes). Un cargador ligador realiza todas las operaciones de ligado y relocalizacin, incluyendo bsqueda automtica en bibliotecas, si se especifica, y carga el programa ligado directamente en la memoria para su ejecucin. Por otro lado, un editor de ligado produce una versin ligada del programa (llamada a menudo mdulo de carga o imagen ejecutable), que se escribe un archivo o biblioteca para su ejecucin posterior. Cuando el usuario esta listo para ejecutar el programa ligado, se puede utilizar un cargador re localizador simple para cargar el programa en la memoria. El editor de ligado realiza relocalizacin de todas las secciones de control relativas al inicio del programa ligado.LIGADOR DINAMICO. El ligador dinmico ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona la posibilidad de cargar las rutinas slo cuando y si se necesitan. Si las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria. Cuando se utiliza el ligador dinmico, la asociacin de una direccin real y el nombre simblico de la rutina llamada no se hace hasta que se ejecuta la proposicin llamada.LIGADOR DEL SISTEMA VAX. El ligador VAX es un editor de ligado que realiza las mismas funciones bsicas alcanzadas con anterioridad. La accin del ligador en la creacin de las secciones de imagen est controlada por ensamblador o compilador por medio de una secuencia de mandatos que forman parte del programa objeto.El lenguaje de mandatos ofrece una gran diversidad de posibilidades: hay ms de 50 cdigos de mandatos posibles. El ligador VAX puede generar tres tipos de imgenes. Una imagen ejecutable es aquella adecuada para la carga y ejecucin; sin embargo, el ligador no puede reprocesar este tipo de imagen. Una imagen compartible no es ejecutable, pero el ligador puede reprocesarla, y se puede utilizar, por ejemplo como tapa intermedia en el ligado de un programa muy grande. Las imgenes compartibles tambin hacen posibles que diferentesProgramas compartan la misma copia de ciertas instrucciones o rea de datos. El tercer tipo de imagen que puede crear el ligado es una imagen de sistema, concebida para ser ejecutada directamente en la mquina VAX.EDITOR DE LIGADO DEL SISTEMA /370. El formato de los programas objeto manejado por el editor de ligado del SISTEMA /370 es muy parecido al analizado para SIC/XE. La tcnica de referencia a un nmero se usa para mejorar la eficiencia. El programa de salida del editor de ligado se llama mdulo de carga, y puede cargarse en la memoria para su ejecucin, y suele contener suficiente informacin para permitir que el editor de ligado los reprocese.LIGADORESTTICO

Cuando se utilizan subrutinas en un programa, el cdigo ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecucin. Para esto, antes de cargar un programa, debe ligarse su cdigo objeto con los cdigos objeto (guardados en uno o ms archivos) de cada una de las subrutinas invocadas por l, obteniendo as un programa ejecutable que contiene tanto el cdigo del mdulo invocador como el cdigo de los mdulos invocados. En este punto, es posible guardar el resultado del proceso de liga en un archivo que podr ser utilizado por un cargador, o el mismo programa ligador puede tambin realizar la tarea de carga. Esto ltimo evita el tener que guardar el cdigo ejecutable en un archivo, con lo que se ahorra espacio en disco. Este ahorro de espacio en disco se paga con el tiempo gastado al tener que ligar todos los mdulos cada vez que se necesite ejecutar el programa.LIGADURAS DE SUBRUTINAS.Al estudiar subrutinas es conveniente identificar dos funciones distintas: el invocador y el invocado.El invocador: es la seccin de cdigo que inicia la llamada a la subrutina.El invocado: es la subrutina llamada por el invocador.Examinaremos las transferencias de control necesarias para implantar la invocacin de subrutinas. Al efectuar una llamada se transfiere el control al cuerpo de la subrutina; cuando esta concluye, devuelve el control a la instruccin que est inmediatamente despus de la llamada a la subrutina desde diversos puntos en el programa, las subrutinas deben ser capaces de regresar a distintos lugares del programa. La direccin de retorno es la direccin de la instruccin que esta inmediatamente despus de la instruccin que transfiere el control al invocado. El invocador proporciona la direccin del retorno al invocado como parte de enlace de la subrutina.El enlace de subrutina es la estructura con que se comparte informacin sobre el invocador y el invocado. El invocador establece parte del enlace de subrutina en una secuencia de instrucciones llamada secuencia de arranque. El invocado establece lo que resta del enlace de subrutina en el prologo de subrutina, el cul puede estar vaco como suponemos de todas las rutinas estn bien estructuradas, las instrucciones al final de la subrutina regresan al invocador. Est secuencia de instrucciones se denomina eplogo de subrutina. Cuando el control regresa al invocador, es posible que este tenga que limpiar el enlace; este conjunto de instrucciones se denomina secuencia de limpieza y tambin puede estar vaca.LIGADOR EN C++Si algn archivo fuente hace referencia a funciones de una biblioteca o de funciones que estn definidas en otros archivos fuentes, el ligador combina estas funciones (con main ()) para crear un archivo ejecutable. Las referencias a variables externas en esta etapa son resueltas.

USO DE LAS BIBLIOTECASC es un lenguaje extremadamente pequeo. Muchas de las funciones que tienen otros lenguajes no estn en C, por ejemplo, no hay funciones para E/S, manejo de cadenas o funciones matemticas.La funcionalidad de C se obtiene a travs de un rico conjunto de bibliotecas de funciones.Como resultado, muchas implementaciones de C incluyen bibliotecas estndar de funciones para varias finalidades. Para muchos propsitos bsicos estas podran ser consideradas como parte de C. Pero pueden variar de mquina a mquina.Un programador puede tambin desarrollar sus propias funciones de biblioteca e incluso bibliotecas especiales de terceros, por ejemplo, NAG o PHIGSPublicadas porCargadores, Ligadores y Enlazadoresa la/s11:33 a. m.No hay comentarios.:Enviar esto por correo electrnicoBlogThis!Compartir en TwitterCompartir en FacebookCompartir en PinterestENLAZADOR Es un programa que toma los objetos generados en los primeros pasos del proceso de compilacin, la informacin de todos los recursos necesarios (biblioteca), quita aquellos recursos que no necesita, y enlaza el cdigo objeto con su(s) biblioteca(s) con lo que finalmente produce un fichero ejecutable o una biblioteca. En el caso de los programas enlazados dinmicamente, el enlace entre el programa ejecutable y las bibliotecas se realiza en tiempo de carga o ejecucin del programa. De igual modo se puede decir que tambin es un mdulo que junta los ficheros de cdigo objetos(generados en la primer parte de la compilacin), la informacin de todos los recursos necesarios (biblioteca), elimina los recursos que no se necesitan y enlaza el cdigo objeto con sus bibliotecas. Finalmente produce el fichero ejecutable o una biblioteca.Existen programas que se enlazan dinmicamente, esto significa que este proceso se hace en el momento que se carga el programa.TIEMPO DE EJECUCIN: Se denomina tiempo de ejecucin al intervalo de tiempo en el que un programa de computadora se ejecuta en un sistema operativo. Este tiempo se inicia con la puesta en memoria principal del programa, por lo que el sistema operativo comienza a ejecutar sus instrucciones. El intervalo finaliza en el momento en que ste enva al sistema operativo la seal de terminacin, sea sta una terminacin normal, en que el programa tuvo la posibilidad de concluir sus instrucciones satisfactoriamente, o una terminacin anormal, en el que el programa produjo algn error y el sistema debi forzar su finalizacin.Este trmino suele emplearse, en oposicin a tiempo de compilacin, para indicar si una accin o hecho sucede en uno u otro tiempo.

BIBLIOTECA INFORMATICA En ciencias de la computacin, una biblioteca (del ingls library) es un conjunto de subprogramas utilizados para desarrollar software. Las bibliotecas contienen cdigo y datos, que proporcionan servicios a programas independientes, es decir, pasan a formar parte de estos. Esto permite que el cdigo y los datos se compartan y puedan modificarse de forma modular. Algunos programas ejecutables pueden ser a la vez programas independientes y bibliotecas, pero la mayora de estas no son ejecutables. Ejecutables y bibliotecas hacen referencias (llamadas enlaces) entre s a travs de un proceso conocido como enlace, que por lo general es realizado por un software denominado enlazador. La mayora de los sistemas operativos modernos proporcionan bibliotecas que implementan los servicios del sistema. De esta manera, estos servicios se han convertido en una "materia prima" que cualquier aplicacin moderna espera que el sistema operativo ofrezca. Como tal, la mayor parte del cdigo utilizado por las aplicaciones modernas se ofrece en estas bibliotecas.El GM ENLAZADOR:

Que es: Son aquellos utilizaran su poder para aumentar tu articulo con LAPICES repetidos o donde no deben estar . Si tienes un articulo con huecos , ser enlazado con 2 lpices iguales o en lugares donde no deben y lo mejor: 100% de probabilidad de xito!.Cmo conseguimos un GM ENLAZADOR?Se consigue mediante AeriaPoints, Ya NO aparecer en eventos ocasionales, es decir, no es un articulo permanente en el Almacn del artculos AP. Estos eventos solian estar en escalas de premios, ruleta de premios, otros.Cmo hacer para enlazar el artculo que queremos? :1) Este "GM Enlazador" bajo ningn concepto debamos sacarlo del banco, as que NO LO QUITES DEL BANCO.2)Ahora que ya tenemos el artculo en el banco debemos proceder al siguiente paso. Nos dirigimos a la bodega npc, donde guardamos:La pieza de armadura, arma o accesorio que queran que se enlazarla.El lpiz que quieras para enlazar la pieza de armadura, arma o accesorio que queremos.Cuntos tipos de enlazadores existen? GM Enlazador accesorios GM Enlazador Normal. GM Enlazador Premium. #GM Enlazador Premium Super# .Cuantos enlaces son por GM enlazador?Cada GM Enlazador vale solamente un enlace.Poda utilizar un GM Enlazase normal para enlazar elementales lvl2 ?Si, ya no se puede, cada GM Enlazador normal tenia un valor especfico.As que ya no puedes utilizar un GM Enlazador normal para que te hagan lo quieras.Poda enlazar cualquier artculo con el GM Enlazador normal?Si, el nivel de conocimiento sobre los artculos que deseas enlazar, es irrelevante, solo necesita ser mas listo que los dems.Enlazadores referentes a la Programacion:Enlazado:Este es el concepto detrs de toda la programacin: que una mquina adecuada de computacin en general puede emular los ms especficos. Un programa de ordenador no es ms que un medio de convertir un motor de computacin de uso general en uno de propsito especial.Sinopsis:El proceso de crear un ejecutable comienza por la compilacin de varias unidades de compilacin independientes. Los ficheros objeto resultantes, junto con libreras ya existentes y algn trozo de cdigo aadido, son despus agrupados de forma ordenada en un solo fichero que constituye el ejecutable.Este proceso de agrupacin y ordenacin es realizado por un programa especial, el enlazador ("Linker"), cuyo nombre evoca una de sus principales funciones, el enlazado ("Binding"). Este proceso es responsable de que, en el ejecutable, cada instancia de un identificador sea asociada correctamente con una funcin u objeto particular. A efectos prcticos esto significa que la mayora de los identificadores utilizados por el programador desaparecen y son sustituidos por direcciones concretas de memoria donde se encuentran los objetos referenciados.Destacar que el enlazado es un proceso independiente del lenguaje de programacin utilizado. Es decir, no es especfico de C++. Para obtener un ejecutable, el linker puede partir de una serie de objetos que se han obtenido de la compilacin de distintos fuentes, incluso escritos originalmente en lenguajes distintos. La nica condicin exigida es que tales ficheros-objeto, producidos por un compilador o por un macro-ensamblador, sean del formato adecuado.De forma sinptica el proceso responde al siguiente esquema:En el cdigo fuente:...func1(); // invocacin de una funcin...El compilador traslada la sentencia anterior a una instruccin del siguiente aspecto:call func1El enlazador sustituye el nemnico func1 por una direccin concreta, donde comienza el cdigo correspondiente a la funcin. Algo parecido a:call 0x4000000Sin embargo, aunque la funcin primordial del enlazador es resolver todas las referencias que puedan existir en el programa y agrupar todos los mdulos en un solo fichero, que pueda ser cargado y ejecutado por el Sistema Operativo, realiza adems otras funciones. Por ejemplo, insertar en el fichero resultante el cdigo del mdulo inicial, que es el encargado de iniciar la ejecucin.Nota: En el caso concreto de Borland C++ el "Linker" es el programa ILINK32.EXE. Pero es bastante raro que sea ejecutado explcitamente durante el proceso de construccin de un ejecutable. Lo normal es que sea invocado indirectamente, a travs del programa supervisor. En concreto, el compilador BCC32.EXE invoca al enlazador incluso cuando no hay nada que compilar. Por ejemplo, el comando:BCC32 mainfile.obj sub1.obj mylib.lib.Conduce al enlazado de los ficheros MAINFILE.OBJ, SUB1.OBJ y MYLIB.LIB para producir el ejecutable MAINFILE.EXE. Para ello, no solo invoca al enlazador, con los argumentos adecuados, tambin incluye por su cuenta el mdulo de inicio C0W32.OBJ; la librera CW32.LIB y la librera de importacin IMPORT32.LIB. Adems, le pasa la opcin /c (distinguir maysculas y minsculas).Por su parte, el enlazador GNU es el programa ld.exe (suponemos la versin MinGW para Windows) y para la construccin de proyectos C++, generalmente suele ser invocado por el compilador (g++.exe). Por ejemplo, para enlazar los ficheros del ejemplo anterior en un solo ejecutable main.exe, se utilizara el siguiente comando:g++ mainfile.o sub1.o mylib.lib -o "main.exe"Propiedades del enlazado:Respecto al enlazado existen dos aspectos a tener en cuenta: uno de ellos tiene que ver con una especie de "mbito" de nombres dentro del ejecutable. El otro se refiere a "cmo" se enlaza un identificador con el objeto al que representa.Tipos de Enlazados:a) Enlazado Esttico: Empezaremos por la segunda de las consideraciones: Hemos dicho que durante el enlazado, el "Linker" asocia cada identificador con el objeto correspondiente. Lo que equivale a decir que asocia el identificador con la direccin del objeto. Esto puede efectuarse en tiempo de compilacin o en runtime. Cuando esto puede quedar completamente definido en tiempo de compilacin, se dice que se trata de un enlazado previo o esttico ("Earlybinding"). As pues, enlazado esttico significa que cuando, por ejemplo, el compilador genera una llamada a una funcin determinada, el enlazador puede resolverla mediante la direccin absoluta del cdigo que debe ejecutarse. En el caso del esquema anterior , el enlazador pudo determinar que func1comienza en la direccin 0x4000000. Puede ser el caso de una funcin sobrecargada en la que el compilador puede saber que instancia corresponde a una invocacin por el anlisis de los argumentos utilizados.Para la resolucin antes descrita, cada vez que el enlazador encuentra el identificador de una variable o de una funcin, debe buscar en la unidad de compilacin que est utilizando y en caso de no encontrarlo en ella, en el resto de mdulos .obj; en los ficheros de recursos .res, y en las libreras .lib que hemos ordenado enlazar juntos. Si finalmente la variable, funcin o recurso no aparece, el enlazador lanza un mensaje de error: unresolvedexternalreference...A efectos prcticos, lo anterior supone que cdigo responsable de la funcionalidad del programa, se encuentran en el propio ejecutable, lo que presenta la ventaja de que la aplicacin no depende de la existencia de mdulos exteriores. Sin embargo, esto es rarsimo en la programacin actual. Sobre todo porque en los entorno multiusuario, las aplicaciones no pueden controlar directamente los dispositivos del Sistema, sino que debe hacerlo mediante llamadas a determinados servicios situados fuera del ejecutable (lo contrario, adems de ser imposible, exigira que cada ejecutable englobara gran parte del propio SO).b) Enlazado Dinmico: En ocasiones las cosas no suceden como se han descrito en el prrafo anterior. Hay veces en que hasta el momento de la ejecucin, el programa no puede (o no quiere) determinar la direccin de la funcin que se invoca. Esta situacin se presenta tpicamente cuando se usan las denominadas libreras dinmicas y en la POO, cuando se programan operaciones genricas con objetos sin saber que objeto concreto (instancia de la clase) la utilizar en su momento. Es decir, se utilizan clases polimrficas.Para comprender el proceso, supongamos una variacin del esquema anterior, en el que la funcin invocada no se encuentra en un mdulo objeto, sino en una librera dinmica (DLL) que solo ser cargada en el momento de la ejecucin del programa o incluso ms tarde; no cuando este arranca, sino cuando se realiza la invocacin a la funcin. En estas condiciones, el enlazador no puede conocer la direccin de func1. La solucin adoptada es precisamente el enlazado o dinmico ("Late binding").En este tipo de enlazado, parte del cdigo necesitado por la aplicacin se encuentra en ficheros distintos del propio ejecutable. Por ejemplo, en las conocidas libreras .DLL. El inconveniente es que la ejecucin exige la presencia de todos los mdulos externos (que pueden estar efectivamente presentes o no). La ventaja es que determinadas habilidades, sobre todo las del propio Sistema Operativo, y otras muy comunes, no necesitan estar duplicadas en cada ejecutable, con la consiguiente economa de espacio. Los ejecutables resultan as ms pequeos. Adems, mltiples programas pueden compartir los mismos mdulos.Como ejemplo ilustrativo de lo anterior, podemos citar la utilidad Linux que permite encadenar (link) ficheros y directorios. Esta utilidad est disponible en dos versiones: La primera sln, utiliza enlazado esttico; la segunda ln, enlazado dinmico. En mi sistema (SuSE 9.0), el tamao de ambos ejecutables es el siguiente:/sbin/sln 429308 Bytes/bin/ln 22864 BytesLinux dispone incluso de la utilidad ldd que permite conocer el tipo de enlazado que tiene un ejecutable y, en su caso, de qu mdulos depende. En mi sistema obtengo el siguiente resultado para el encadenador dinmico [3]:# ldd -v /bin/ln libc.so.6 => /lib/i686/libc.so.6 (0x40028000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)Versioninformation: /bin/ln: libc.so.6 (GLIBC_2.3) => /lib/i686/libc.so.6 libc.so.6 (GLIBC_2.1.3) => /lib/i686/libc.so.6 libc.so.6 (GLIBC_2.1) => /lib/i686/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/i686/libc.so.6 libc.so.6 (GLIBC_2.2) => /lib/i686/libc.so.6 /lib/i686/libc.so.6:ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2Libreras de enlazado dinmico: Cuando los recursos a utilizar se encuentran en libreras de enlazado dinmico y en consecuencia, su ubicacin exacta no puede ser establecida en tiempo de enlazado, se recurre a un artificio algo ms tortuoso que en el caso de enlazado esttico. En principio, la informacin sobre la localizacin de las funciones externas, estn contenidas en las denominadas libreras de importacin que tienen la misma terminacin .lib/.a que las libreras normales, aunque en realidad, no contienen cdigo, sino registros con el nombre del mdulo que contiene la funcin (fichero .dll), as como el nombre o nmero del punto de entrada a la funcin dentro del fichero. El enlazador busca en estas libreras de importacin de la misma forma que lo hace con el resto de ficheros .obj, .res y .lib que se compilan. Cuando el enlazador encuentra esta informacin la anota en la forma que se describe a continuacin y da el asunto por resuelto sin original ningn error de enlazado.Nota: Las libreras de importacin pueden contener datos sobre una o varias DLLs. En el caso de la programacin C++ para Windows, esta situacin es frecuentsima, ya que la mayor parte de propio Sistema Operativo est repartido en multitud de DLLs. En dicho Sistema, las libreras de importacin ms importantes estn en los ficheros kernel32.lib; user32.lib ygdi32.lib. Recordar tambin que entre las herramientas que acompaan al compilador C++ de Borland, est la utilidad implib.exe, que puede crear una librera de importacin a partir de una DLL. El resto de compiladores suelen disponer de herramientas anlogas.Los compiladores C++ construyen en cada ejecutable una tabla de entradas que contiene la direccin de todas las funciones de direccin conocida, y adems, para poder realizar el enlazado dinmico, con la informacin obtenida de las libreras de importacin construyen otra tabla denominada Tabla de Direcciones Importadas o Itable ("ImportAddressTable"). Cada funcin cuya direccin no pueda ser conocida en tiempo de compilacin, tiene un sitio en la tabla, en el que se inserta un pequeo trozo de cdigo ("thunk") que ms tarde, en tiempo de ejecucin, podr establecer la verdadera direccin.La invocacin de una funcin como func1 que est situada en una librera de enlazado dinmico, da lugar a un "thunk" del siguiente aspecto:

jmp DWORD PTR __imp_func1En este caso __imp_func1 es una direccin conocida: la del "slot" de func1 en la tabla de direcciones importadas del ejecutable. Para que todo funcione correctamente solo es preciso que el cargador de la DLL, que utiliza la informacin obtenida de la librera de importacin, actualice dicha tabla en el momento de la carga.Funciones Virtual: Tambin existen situaciones en las que es preciso utilizar enlazado dinmico aunque el ejecutable no utilice DLLs. En la POO se presentan situaciones en las que se programan operaciones (mediante funciones virtuales) cuya definicin es distinta para distintos objetos. En estos casos, cuando se necesita que un objeto ejecute uno de sus mtodos, el cdigo que deber llamarse no est determinado hasta el momento de la ejecucin, porque depende del objeto que realiza la invocacin.Los compiladores pueden utilizar cualquier mecanismo para resolver el problema, pero el ms comn consiste en la utilizacin de tres elementos:Para cada clase en la que existan mtodos susceptibles de este comportamiento (mtodos virtuales), se crea una tabla denominada vtable [2], de punteros con las direcciones de dichas funciones. La vtable realiza en este caso la misma funcin que la Itable cuando el programa utiliza enlazado dinmico debido a la existencia de libreras DLL.En cada objeto que se instancia de estas clases, se incluye automticamente un puntero oculto vptr a la vtable.En cada invocacin a un mtodo de un objeto, se aade un pequeo trozo de cdigo ("thunk"), que permite calcular la direccin de la funcin que debe utilizarse. Este cdigo suele ser pequeo, contiene solo unas pocas instrucciones ensamblador, y utiliza la vtable y el vptr para seleccionar en tiempo de ejecucin la funcin correspondiente. Cada objeto puede comportarse de forma distinta segn este cdigo especial. As que cuando se le enva un mensaje, es este cdigo el que calcula y decide que hacer con el mensaje (el proceso se describe con ms detalle al tratar de las funciones virtuales 4.11.8a). Naturalmente esta versatilidad tiene su coste de eficacia, de forma que las funciones con enlazado dinmico sonmenos eficientes que las de enlazado esttico.En C++ el programador puede decidir en que funciones desea esta capacidad de enlazado retrasado utilizando la palabra-clave virtual. Cada vez que en una clase C se declara una funcin virtual, la case deviene en polimrfica ( 4.11.8) o abstracta ( 4.11.8c), lo que obliga al compilador a incluir en la estructura de la clase un puntero vptr que seala a una estructura de tipo matriz, la vtable, que contiene un "slot" o espacio para un puntero-a-funcin por cada funcin virtual que se haya declarado. Si C es a su vez derivada de una clase-base B, la vtable incluye espacio para las direcciones de cualquier funcin virtual que pudiera existir en B y en cualquier clase antecesora de esta. A su vez, obliga tambin a incluir una vtable en cualquier clase derivada de C. Existe una sola vtable para cada clase y los datos (punteros-a-funcin) contenidos en ella son estticos, en el sentido de que no dependen de ninguna instancia u objeto particular de la clase.Atributos de enlazado:

Todos los identificadores tienen alguno de los tres atributos de enlazado (estrechamente relacionados con su mbito): externo, interno, o sin enlazado. Estos atributos son propios para cada identificador en cada unidad de compilacin, y vienen determinados por la situacin y el formato de la declaracin en que se introdujo cada identificador, as como del uso explcito o implcito (por defecto) de los especificadores de tipo de almacenamiento static y extern.El tipo de enlazado define una especie de mbito, pues indica si el mismo nombre en otro mbito se refiere al mismo objeto (variable o funcin) o a otro distinto.Cada instancia de un identificador con enlazado externo representa el mismo objeto o funcin a travs del total de ficheros y libreras que componen el programa. Es el tipo de enlazado a utilizar con objetos cuyo identificador puede ser utilizado en unidades de compilacin distinta de aquella en la que se ha definido. Por esta razn se dice que las etiquetas con enlazado externo son "globales" para el programa. Recuerde: enlazado externo visibilidad global.Cada instancia de un identificador con enlazado interno representa el mismo objeto o funcin solo dentro del mismo fichero. Los objetos con el mismo nombre en otros ficheros son objetos distintos. Este tipo de objetos solo pueden utilizarse en la unidad de compilacin en que se han definido, por lo que suele decirse que las etiquetas con enlazado interno son "locales" a sus unidades de compilacin. Recuerde: enlazado interno visibilidad de fichero.Las unidades sin enlazado representan entidades nicas. Por ejemplo, las variables declaradas dentro de un bloque, que no contengan el modificador extern, representan entidades nicas dentro del bloque, sin relacin con nada en el exterior del mismo. Los objetos con el mismo nombre en otros bloques son objetos distintos. No obstante, es posible asignar punteros a este tipo de objetos sin enlazado, de forma que puedan ser accedidos desde cualquier punto del programa, incluso desde otras unidades de compilacin. Recuerde: sin enlazado visibilidad de bloque.Como puede verse, el hecho que un identificador utilizado en diversas unidades de compilacin seale potencialmente a la misma entidad en todos los mdulos, depende exclusivamente del tipo de enlazado que tenga en cada uno de ellos.Reglas de enlazado:En un fichero, cualquier objeto o identificador que tenga mbito global deber tener enlazado interno si su declaracin contiene el especificador static.Si el mismo identificador aparece con ambos enlazados externo e interno, dentro del mismo fichero, tendr enlazado externo.Si en la declaracin de un objeto o funcin aparece el especificador de tipo de almacenamiento extern, el identificador tiene el mismo enlazado que cualquier declaracin visible del identificador con mbito global. Si no existiera tal declaracin visible, el identificador tiene enlazado externo.Si una funcin es declarada sin especificador de tipo de almacenamiento, su enlazado es el que correspondera si se hubiese utilizado extern ( es decir, extern se supone por defecto en los prototipos de funciones).Si un objeto (que no sea una funcin) de mbito global a un fichero es declarado sin especificar un tipo de almacenamiento, dicho identificador tendr enlazado externo (mbito de todo el programa). Como excepcin, los objetos declarados const que no hayan sido declarados explcitamente extern tienen enlazado interno.Los identificadores que respondan a alguna de las condiciones que siguen tienen un atributo sin enlazado:a)Cualquier identificador distinto de un objeto o una funcin (por ejemplo, un identificador typedef ).b)Parmetros de funciones.c)Identificadores para objetos de mbito de bloque, entre corchetes { } , que sean declarados sin el especificador de clase extern.Ejemplo:int x;staticst = 0;voidfunc(int);intmain() {for (x = 0; x < 10; x++) func(x);}voidfunc(int j) {st += j;cout