Es un ejecutable enlazado estáticamente más rápido que un enlazados dinámicamente ejecutable?

Desde el enlace dinámico de las bibliotecas tienen que ser resueltos en tiempo de ejecución, se enlaza estáticamente ejecutables más rápido que vincula dinámicamente ejecutables?

  • Por lo general, cuando vincula dinámicamente en una biblioteca hay un costo para las llamadas. Una llamada pasa a través de un intermediario de la tabla y desde la propia biblioteca se asigna sólo lectura, todas sus variables también deben residir fuera de la biblioteca. No sé los detalles para Windows sin embargo. Generalmente la sobrecarga es insignificante y es mucho mejor elegir la vinculación dinámica. Para los efectos de la reutilización de código y la capacidad de actualización de una biblioteca con un agujero de seguridad.
  • Posibles duplicados de la vinculación Estática vs vinculación dinámica

2 Kommentare

  1. 18

    Vinculación estática produce una mayor archivo ejecutable de la vinculación dinámica porque tiene que compilar todo el código de la biblioteca directamente en el archivo ejecutable. El beneficio es la reducción de la sobrecarga de no tener que llamar a las funciones de una biblioteca, y en cualquier lugar de algo para acelerar notablemente los tiempos de carga.

    Un enlazados dinámicamente ejecutable será menor, ya que los lugares de llamadas en tiempo de ejecución de código compartido de bibliotecas. Hay varias ventajas a esto, pero los importante a partir de una velocidad o la optimización de la perspectiva de la reducción en la cantidad de espacio en disco y la memoria consumida, y la mejora de la multitarea debido a la reducción de total consumo de recursos (sobre todo en Windows).

    Así que es una cuestión de equilibrio: hay argumentos de por qué uno podría ser ligeramente más rápido. Esto depende de un montón de cosas diferentes, tales como en qué medida la velocidad crítica de las rutinas en el programa se basó en las llamadas a funciones de la biblioteca. Pero el punto importante a destacar en la instrucción anterior es que podría ser marginalmente más rápido. La diferencia de velocidad será casi imperceptible, y difícil de distinguir incluso de lo normal, espera que las fluctuaciones.

    Si realmente la atención, referencia y vea. Pero te aconsejo esto es una pérdida de tiempo, y que no son más eficaces y más importante maneras de aumentar la aplicación de su velocidad. Usted será mucho mejor en el largo plazo, teniendo en cuenta otros factores distintos de la velocidad a la hora de hacer la «dinámica vincular o enlazar estáticamente» la decisión. Por ejemplo, la vinculación estática puede ser vale la pena considerar si usted necesita para hacer que su aplicación sea más fácil de implementar, especialmente a los diversos entornos de usuario. O, la vinculación dinámica puede ser una mejor opción (especialmente si dichas bibliotecas compartidas no son propios), ya que la aplicación automáticamente cosechar los beneficios de las mejoras hechas a cualquiera de las bibliotecas compartidas que las llamadas sin tener que levantar un dedo.


    EDICIÓN: Microsoft hace la recomendación específica que prefieren la vinculación dinámica sobre la vinculación estática:

    No se recomienda para redistribuir
    C/C++ aplicaciones que de forma estática
    enlace a bibliotecas de Visual C++. Es
    a menudo asumido erróneamente que por
    enlazar estáticamente su programa
    Bibliotecas de Visual C++ es posible
    mejorar significativamente el rendimiento
    de una aplicación. Sin embargo, el impacto
    en el rendimiento de la carga dinámica de
    Bibliotecas de Visual C++ es insignificante
    en casi todos los casos. Además,
    la vinculación estática no permite
    mantenimiento de la aplicación y su
    las bibliotecas dependientes, ya sea por la
    solicitud del autor o de Microsoft. Para
    ejemplo, considere una aplicación que
    se enlaza estáticamente a un particular
    la biblioteca, que se ejecuta en un equipo cliente
    con una nueva versión de esta biblioteca.
    La aplicación todavía no utiliza código de
    la versión anterior de esta biblioteca,
    y no en beneficio de la biblioteca
    mejoras, tales como la seguridad
    las mejoras. Los autores de C/C++
    aplicaciones se recomienda para
    creo que a través de la prestación de servicios de escenario
    antes de decidir de forma estática enlace
    las bibliotecas dependientes, y el uso dinámico
    la vinculación, siempre que sea posible.

  2. 6

    Depende del estado de tu disco y si el Dll podría ser utilizado en otros procesos. Un arranque en frío que sucede cuando el programa y sus archivos Dll nunca fueron cargado antes. Un archivo EXE sin Dll tiene un rápido arranque en frío, ya que solo un archivo debe ser encontrado. Usted tendría que tener un muy fragmentado en el disco casi completo para no tener este caso.

    Un archivo DLL se puede empezar a pagar cuando ya está cargado en otro proceso. Ahora las páginas de código de la DLL son simplemente compartir, inicio de sobrecarga es muy bajo uso de memoria y es eficiente.

    Un caso bastante similar es un buen inicio, un inicio donde el archivo DLL todavía está disponible en la caché del sistema de archivos de un tiempo anterior en que se utiliza. La diferencia entre un resfriado y un inicio en caliente puede ser muy importante en un lento disco. La razón por la que todo el mundo le gusta un SSD.

    • Voto a favor. Esta podría ser la más importante desde un punto de vista práctico.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea