La mejor respuesta
Antes de pasar a la diferencia, veamos brevemente el proceso de enlace.
¿Por qué el enlazador?
Cuando escribe código C (o cualquier otro idioma), se almacena en formato .c.
#include
int main(){
printf("quora");
return 0;
}
Ahora este programa pasa por la fase de compilación en la que este el código fuente se convierte en instrucciones en lenguaje de máquina. Estos son los archivos de objeto almacenados en formato .o u .obj. Si tenemos 2 archivos separados, tendremos 2 archivos obj separados. Estos archivos son solo la traducción de su programa, para ejecutar estos programas tenemos que generar ejecutables que el sistema operativo realmente pueda ejecutar. Para este propósito, usamos el vinculador.
Ahora el vinculador crea un solo archivo ejecutable a partir de muchos archivos objeto. Ahora en nuestro programa C usamos la función main (), pero ¿dónde está su definición? El alcance del compilador está limitado a un solo archivo, por lo que no busca referencias que puedan haber sido declaradas y definidas en otros archivos.
El vinculador busca en varios archivos esta definición de función «main ()» y los vincula. Ahora vamos a su pregunta.
Enlace estático vs dinámico:
- En enlace estático , todos los módulos de la biblioteca se copian en la imagen ejecutable final. Cuando se carga el programa, el sistema operativo coloca solo un archivo en la memoria que contiene tanto el código fuente como las bibliotecas de referencia. Mientras que en vinculación dinámica solo se colocan en la memoria los nombres de las bibliotecas externas o compartidas. El enlace dinámico permite que muchos programas utilicen una copia única del módulo ejecutable.
- El enlace estático lo realizan los enlazadores en el paso final de la compilación, mientras que el enlace dinámico se realiza en tiempo de ejecución por el sistema operativo.
- Archivos enlazados estáticamente consume más disco y memoria ya que todos los módulos ya están vinculados. Pero en Enlace dinámico, solo se almacena una copia del módulo de referencia que muchos programas utilizan para ahorrar memoria y espacio en disco.
- En Vinculación estática, si se cambia el programa fuente externo, se deben recompilar y volver a vincular. Pero en el caso de vinculación dinámica , solo es necesario actualizar y recompilar un módulo.
- Los programas vinculados estáticamente son más rápidos que su contraparte dinámica.
- Dado que el archivo vinculado estáticamente contiene todos los paquetes y módulos, no se producen problemas de compatibilidad. Mientras que en enlace dinámico , dado que los archivos de la biblioteca se almacenan por separado, puede haber problemas de compatibilidad (digamos que una nueva versión del compilador compila un archivo de la biblioteca).
- Los programas vinculados estáticamente siempre toman un tiempo de carga constante mientras que el tiempo es variable en los programas vinculados dinámicamente.