2012-02-26 8 views
6

En primer lugar, utilizo el encabezado definido por el usuario y el archivo correspondiente cpp. Luego incluyo y así sucesivamente. Si cambiara a DLL, ¿se retrasaría la velocidad de ejecución del código?Efecto de la DLL en la velocidad de ejecución

En segundo lugar, sé que en "DLL", "D" representa "dinámico" sin embargo, mi amigo dijo que hay dos maneras de usarlos: de forma estática y dinámica. Si ya es dinámico, ¿qué tenemos que ver con "estático"?

Respuesta

12

A menos que la función sea muy pequeña (de lo contrario se inserta), usar una DLL no tiene ninguna diferencia en el rendimiento (aparte del hecho de que cargar una DLL aumenta el tiempo de inicio de la aplicación.) Grande, rendimiento -las aplicaciones críticas usan DLL (por ejemplo, la biblioteca Intel Math). Hay penas menores si el compilador no puede hacer la optimización de todo el programa, pero estas son diferencias muy pequeñas que generalmente no importan.

Relativo a estática/dinámica: supongo que quiere decir que puede vincular contra una DLL de la manera normal (mediante el uso de una biblioteca de importación), lo que obliga a cargarlo siempre o cargarlo dinámicamente en tiempo de ejecución (usando LoadLibrary y dlopen). No existe diferencia de rendimiento allí, pero el uso de LoadLibrary le permite retrasar la carga de la biblioteca hasta que realmente se necesite.

+1

Algunos toolchains también proporcionan una forma automática de carga de retraso, p. Ej. El interruptor de Microsoft ['/DELAYLOAD'](http://msdn.microsoft.com/en-us/library/yx9zd12s.aspx) –

+0

en un sitio web (http://logix4u.net/vc/19-a-tutorial- on-creating-dlls-with-vc) Leí que la DLL es más lenta que la manera convencional. Son solo unas pocas oraciones. ¿Podrías comentar sobre eso también, por favor? – Shibli

+0

Llamar a un archivo DLL tiene como máximo el costo de llamar a una función a través de un puntero de función. Eso es casi cero para cualquier función no trivial (y las funciones muy pequeñas se pueden simplemente hacer en línea.) Es comparable en costo con una llamada de función virtual. – Anteru

2
  1. La productividad no debe retroceder, en cuanto a la función de llamada de dll en general similar a la llamada de función local.

  2. dos tipos de libs existe:

    • de un poin de vista, dinámicos libs y estáticas libs. Aquí medios estáticos, que todo el código de los lib estará vinculado estáticamente a su exe, opuestamente dinámica lib permite al código separado del ejecutable para compartían biblioteca, ese código se carga dinámicamente .
    • Entonces, dinámica libary se pueden vincular a estáticamente, y eso quiere decir, que el OS enlazará biblioteca para su programa en el arranque y dinámicamente, que significa, que obtener punteros a los símbolos, estratificados en la biblioteca, por las manos. Si bien la carga dinámica brinda más flexibilidad, es más difícil usar enlaces estáticos.
Cuestiones relacionadas