Cada vez que se compila y ejecuta un archivo de programa C, el compilador genera algunos archivos con el mismo nombre que el archivo de programa C pero con extensiones diferentes. Entonces, ¿qué son estos archivos y cómo se crean?
La siguiente imagen muestra el proceso de compilación con los archivos creados en cada paso del proceso de compilación:
Todo archivo que contenga un programa en C debe guardarse con la extensión ‘.c’. Esto es necesario para que el compilador comprenda que se trata de un archivo de programa C. Supongamos que se nombra un archivo de programa, first.c. El archivo first.c se llama el archivo fuente que guarda el código del programa. Ahora, cuando compilamos el archivo, el compilador de C busca errores. Si el compilador de C no informa ningún error, almacena el archivo como un archivo .obj del mismo nombre, denominado archivo de objeto. Entonces, aquí creará el first.obj. Este archivo .obj no es ejecutable. El proceso es continuado por el Linker que finalmente da un archivo .exe que es ejecutable.
Linker : En primer lugar, háganos saber que las funciones de la biblioteca no son parte de ningún programa C sino del software C. Por lo tanto, el compilador no conoce el funcionamiento de ninguna función, ya sea printf o scanf. Las definiciones de estas funciones se almacenan en su biblioteca respectiva que el compilador debería poder vincular. Esto es lo que hace el Enlazador. Entonces, cuando escribimos #include, incluye la biblioteca stdio.h que da acceso a la entrada y salida estándar. El enlazador vincula los archivos de objeto a las funciones de la biblioteca y el programa se convierte en un archivo .exe. Aquí, se creará first.exe, que tiene un formato ejecutable.
Loader : Cada vez que damos el comando para ejecutar un programa en particular, el cargador entra en funcionamiento. El cargador cargará el archivo .exe en la RAM e informará a la CPU con el punto de inicio de la dirección donde se carga este programa.
Registro de instrucciones : contiene las instrucciones actuales que ejecutará la CPU.
Contador de Programa : Contiene la dirección de las próximas instrucciones a ser ejecutadas por la UCP.
Acumulador : Almacena la información relacionada con los cálculos.
El cargador informa a Program Counter sobre la primera instrucción e inicia la ejecución. Luego, el Contador de programas se encarga de la tarea.
Diferencia entre enlazador y cargador
Enlazador | Cargador |
---|---|
Linker genera el módulo ejecutable de un programa fuente. | Loader carga el módulo ejecutable en la memoria principal para su ejecución. |
Linker toma el código objeto generado por un ensamblador, como entrada. | El cargador toma el módulo ejecutable generado por un enlazador como entrada. |
Linker combina todos los módulos objeto de un código fuente para generar un módulo ejecutable. | Loader asigna las direcciones a un módulo ejecutable en la memoria principal para su ejecución. |
Los tipos de Linker son Linkage Editor, Dynamic linker. | Los tipos de cargador son carga absoluta, carga reubicable y carga dinámica en tiempo de ejecución. |
Publicación traducida automáticamente
Artículo escrito por tyagihardik42 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA