2010-10-11 12 views
5

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?

+1

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

Respuesta

5

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.

+0

Ok. Perfil es lo haré! :RE – nakiya

0

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.

+0

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

+0

@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

0

La mejor manera de averiguarlo es simplemente para medir ...

Cuestiones relacionadas