Enlace estático:
cuando hacemos clic en el archivo .exe (ejecutable) del programa y comienza a ejecutarse, todo el contenido necesario del archivo binario se ha cargado en el espacio de direcciones virtuales del proceso. Sin embargo, la mayoría de los programas también necesitan ejecutar funciones de las bibliotecas del sistema, y estas funciones de biblioteca también deben cargarse.
En el caso más simple, las funciones de biblioteca necesarias están incrustadas directamente en el archivo binario ejecutable del programa. Dicho programa está vinculado estáticamente a sus bibliotecas, y los códigos ejecutables vinculados estáticamente pueden comenzar a ejecutarse tan pronto como se cargan.
Desventaja:
cada programa generado debe contener copias de exactamente las mismas funciones comunes de la biblioteca del sistema. En términos de memoria física y uso de espacio en disco, es mucho más eficiente cargar las bibliotecas del sistema en la memoria solo una vez. La vinculación dinámica permite que ocurra esta carga única.
Vinculación dinámica:
cada programa vinculado dinámicamente contiene una pequeña función vinculada estáticamente que se llama cuando se inicia el programa. Esta función estática solo asigna la biblioteca de enlaces a la memoria y ejecuta el código que contiene la función. La biblioteca de enlaces determina cuáles son todas las bibliotecas dinámicas que requiere el programa junto con los nombres de las variables y funciones necesarias de esas bibliotecas al leer la información contenida en las secciones de la biblioteca.
Después de lo cual asigna las bibliotecas al centro de la memoria virtual y resuelve las referencias a los símbolos contenidos en esas bibliotecas. No sabemos en qué parte de la memoria se asignan realmente estas bibliotecas compartidas: se compilan en un código independiente de la posición (PIC), que puede ejecutarse en cualquier dirección de la memoria.
Ventaja:
Se reducen los requisitos de memoria del programa. Una DLL se carga en la memoria solo una vez, mientras que más de una aplicación puede usar una sola DLL en ese momento, ahorrando así espacio en la memoria. También se reducen los costos de soporte y mantenimiento de aplicaciones.