2010-10-11 10 views
5

Come dice il titolo, rispetto a una funzione normale, c'è un colpo perfetto nel chiamare le funzioni di dll? La DLL verrà caricata da dlopen. MODIFICA: Ignora dlsym tempo perché lo faccio solo una volta per ogni funzione.C'è qualche colpo di grazia usando le funzioni della DLL?

+1

non si chiama DLL sotto linux. È un oggetto condiviso. Il caricamento dell'oggetto condiviso richiede un po 'di tempo extra ma una volta caricato non dovrebbe fare alcuna differenza dalle normali funzioni. – Vinzenz

risposta

5

chiamate a funzioni DLL sono indiretti per indirizzo e il compilatore non li può inline, per cui v'è un leggero calo di prestazioni.

È necessario preoccuparsi solo se vengono utilizzati in un ciclo interno critico delle prestazioni e dopo averli profilati.

+0

Ok. Profilo che farò! : D – nakiya

0

Sì, c'è un calo di prestazioni. Fai una chiamata dlsym per ottenere l'indirizzo della funzione e poi chiama la funzione con quell'indirizzo. Poiché esiste una chiamata dlsym aggiunta rispetto a una chiamata di funzione dallo stesso modulo, deve essere più lenta. Quanto conta? Dipende. L'unico modo sicuro per saperlo è misurarlo.

+0

Hai ragione. Ma nel mio caso, eseguo 'dlsym' una sola volta per tutta la durata del programma per ogni funzione. E, inoltre, uso i puntatori di funzione per invocare la funzione. E allora? – nakiya

+0

@nakiya In tal caso perdi solo le opportunità di ottimizzazione che avresti altrimenti se la funzione chiamata fosse collegata staticamente, cioè inlining, ottimizzazione inter-procedurale, propagazione costante e simili. In altre parole, non è affatto diverso dal chiamare una funzione dello stesso modulo tramite un puntatore a funzione. – usta

0

Il modo migliore per scoprire è semplicemente per misurare ...

Problemi correlati