Como dice el título, en comparación con una función normal, ¿hay un golpe de percusión en llamar a las funciones dll? El dll se cargará por dlopen
. EDITAR: Ignorar dlsym
vez porque solo lo hago una vez por cada función.¿Hay algún golpe de perfunción usando las funciones de DLL?
Respuesta
Las llamadas a funciones DLL son indirectos por la dirección y el compilador no puede inline ellos, por lo que no es un pequeño impacto de rendimiento.
Solo debe preocuparse si los utiliza en un ciclo interno de rendimiento crítico y después de perfilarlos.
Ok. Perfil es lo haré! :RE – nakiya
Sí, hay un golpe de rendimiento. Realiza una llamada dlsym para obtener la dirección de la función y luego llama a la función con esa dirección. Como hay una llamada dlsym adicional en comparación con una llamada de función del mismo módulo, debe ser más lenta. ¿Cuánto importa? Depende. La única forma segura de saber es medirlo.
Tienes razón. Pero en mi caso, solo hago 'dlsym' una vez durante la vida del programa para cada función. Y, además, uso punteros a función para invocar la función. ¿Qué hay de entonces? – nakiya
@nakiya En ese caso, solo perderá las oportunidades de optimización que tendría si la función llamada estuviera vinculada estáticamente, es decir, en línea, optimización entre procedimientos, propagación constante y similares. En otras palabras, no es realmente diferente de llamar a una función del mismo módulo a través de un puntero de función. – usta
La mejor manera de averiguarlo es simplemente para medir ...
- 1. ¿Hay algún visor de funciones de exportación DLL nativo?
- 2. Rendimiento SQL: ¿Hay algún golpe de rendimiento usando NVarchar (MAX) en lugar de NVarChar (200)
- 3. ¿Hay algún DLL o DLL como concepto en Android?
- 4. ¿Cómo ver las funciones de DLL?
- 5. ¿Hay algún uso para declaraciones de funciones locales?
- 6. ¿Hay algún efecto secundario de usar muchas funciones estáticas?
- 7. Listado de las funciones exportadas de un archivo DLL
- 8. ¿Hay algún golpe de rendimiento involucrado al elegir gzip sobre deflate para la compresión http?
- 9. Hay una manera de encontrar todas las funciones expuestas por un dll
- 10. dividida en dos usando escritura del golpe
- 11. ¿Hay algún resumen de guayaba?
- 12. Generando .dll usando CMake
- 13. ¿Hay algún embellecedor CoffeeScript?
- 14. ¿Hay algún inconveniente en el uso de funciones anónimas en JavaScript? P.ej. ¿uso de memoria?
- 15. ¿Hay algún otro atributo útil para las propiedades de C#?
- 16. ¿Hay algún paquete de Java para manejar las URLs construidas?
- 17. Longitud máxima de nombres de funciones en una DLL
- 18. ¿Hay algún cliente DB2 de fuente abierta?
- 19. ¿Hay algún Principio de Clojure?
- 20. ¿Hay algún Treebank gratis?
- 21. ¿Hay algún beneficio real de usar J #?
- 22. Uso de funciones envueltas en SWIG desde Windows .dll
- 23. ¿Hay algún problema en Perl 5.12.2 usando empalme en @ISA?
- 24. C# Colocando las DLL requeridas en algún lugar que no sea la raíz de la salida
- 25. ¿Hay algún contenedor API de Robocopy?
- 26. funciones sobrecargadas en C++ DLL archivo DEF
- 27. ¿Hay alguna desventaja en el uso de las funciones -Bsymbolic-?
- 28. ¿Hay algún programa que ofusque el código fuente de C#?
- 29. Usando Windows DLL desde Linux
- 30. Golpe a través de java.awt.Font
no lo llaman DLL en Linux. Es un objeto compartido. La carga del objeto compartido toma algo de tiempo extra, sin embargo, una vez que se carga, no debe hacer ninguna diferencia con las funciones normales. – Vinzenz