Requisito previo: introducción al diseño del compilador
Linker es un programa en un sistema que ayuda a vincular módulos de objetos de un programa en un solo archivo de objeto. Realiza el proceso de vinculación. Los enlazadores también se denominan editores de enlaces. La vinculación es un proceso de recopilación y mantenimiento de fragmentos de código y datos en un solo archivo. Linker también vincula un módulo en particular a la biblioteca del sistema. Toma módulos de objeto del ensamblador como entrada y forma un archivo ejecutable como salida para el cargador. La vinculación se realiza tanto en tiempo de compilación, cuando el código fuente se traduce a código de máquina, como en tiempo de carga, cuando el cargador carga el programa en la memoria. La vinculación se realiza en el último paso de la compilación de un programa.
Código fuente -> compilador -> Ensamblador -> Código objeto -> Enlazador -> Archivo ejecutable -> Cargador
La vinculación es de dos tipos: 1. Vinculación estática: se realiza durante la compilación del programa fuente. La vinculación se realiza antes de la ejecución en la vinculación estática. Toma una colección de archivos de objetos reubicables y argumentos de línea de comandos y genera un archivo de objetos totalmente vinculado que se puede cargar y ejecutar. El enlazador estático realiza dos tareas principales:
- Resolución de símbolo: asocia cada referencia de símbolo con exactamente una definición de símbolo. Cada símbolo tiene una tarea predefinida.
- Reubicación: reubica la sección de código y datos y modifica las referencias de símbolos a las ubicaciones de memoria reubicadas.
El enlazador copia todas las rutinas de biblioteca utilizadas en el programa en una imagen ejecutable. Como resultado, requiere más espacio de memoria. Como no requiere la presencia de una biblioteca en el sistema cuando se ejecuta, es más rápido y portátil. No hay posibilidad de falla y menos posibilidad de error. 2. Vinculación dinámica –La vinculación dinámica se realiza durante el tiempo de ejecución. Esta vinculación se logra colocando el nombre de una biblioteca compartible en la imagen ejecutable. Hay más posibilidades de errores y fallas. Requiere menos espacio de memoria ya que varios programas pueden compartir una sola copia de la biblioteca. Aquí podemos realizar el intercambio de código. Significa que si estamos usando el mismo objeto varias veces en el programa, en lugar de vincular el mismo objeto una y otra vez a la biblioteca, cada módulo comparte información del objeto con otros módulos que tienen el mismo objeto. La biblioteca compartida necesaria en la vinculación se almacena en la memoria virtual para ahorrar RAM. En esta vinculación también podemos reubicar el código para que el código funcione sin problemas, pero no todo el código es reubicable. Corrige la dirección en tiempo de ejecución.
Publicación traducida automáticamente
Artículo escrito por ManpreetGill y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA